链表的基本操作之_增删改查

<span style="font-size:32px;"><strong style="background-color: rgb(51, 255, 51);">链表的基本操作之_增删改查</strong></span>

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Node
{
	int data;
	struct Node *next;

}SLIST;

SLIST *Creat_SList();
int SList_Print(SLIST *pHead);
//在节点数值为x的前面插入y
int SList_NodeInsert(SLIST *pHead,int x,int y);
//删除节点为y的链表节点。
int SList_NodeDel(SLIST *pHead,int y);
//销毁链表
int SList_Destory(SLIST *pHead);

SLIST *Creat_SList()
{
	//1.创建头结点并初始化
	SLIST *pHead =NULL;

	SLIST *pM=NULL;//辅助指针变量
	SLIST *pCur;//指向最后一个节点位置的指针

	int data=0;
	pHead=(SLIST*)malloc(sizeof(SLIST));
	pHead->data=0;
	pHead->next=NULL;

//2循环创建结点,结点数据域中的数值从键盘输入
//以-1作为输入结束标志
	printf("please input the data of node(-1 quit)");
	scanf("%d",&data);

//准备环境 让pCur指向pHead
	pCur=pHead;//一开始链表的开始也是链表的结尾;
	while (data!=-1)
	{
		//不断的malloc新节点,并且数据域赋值
		pM=(SLIST*)malloc(sizeof(SLIST));
		pM->data=data;
		pM->next=NULL;
		//不断地新节点进入链表

		//1.新节点入链表
		pCur->next=pM;
		//2.当前节点下移,(新节点变成当前节点)
		pCur=pCur->next;

		//如果合法,让用户再次输入需要插入的节点。
		printf("please input the data of node(-1 quit)");
		scanf("%d",&data);
	}

	return pHead;//一定要返回,不然在以后的输出,增删查改等操作就无法利用。
}

<img src="http://img.blog.csdn.net/20150420192944110?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

//链表的打印:

int SList_Print(SLIST *pHead)
{
	SLIST *p=NULL;//辅助指针,让它移动,依次输出。

	if(pHead==NULL)
	{
		return -1;
	}

	//准备环境
	p=pHead->next;
	printf("\nBegin");
	while(p)
	{
		printf("%d",p->data);
		p=p->next;
	}
	printf("End");
	return 0;
}

//销毁链表

int SList_Destory(SLIST *pHead)
{
	//删除当前节点前,需要把后继节点位置缓存
	SLIST *pTem=NULL;
	SLIST *pCur=pHead;
	if(pHead==NULL)
	{
		return -1;
	}

	while(pCur)
	{
		//缓存后继节点位置
		pTem=pCur->next;
		//删除当前节点
		free(pCur);
		//当前节点下移
		pCur=pTem;
	}
	return 0;
}
<img src="http://img.blog.csdn.net/20150420193014499?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
int SList_NodeInsert(SLIST *pHead,int x,int y)//在节点数值为x的前面插入y
{
	SLIST *pCur = NULL,*pPre=NULL,*pM=NULL;
	if(pHead==NULL)
	{
		return -1;
	}

	//环境准备;
	pPre=pHead;
	pCur=pHead->next;
	//不断的malloc新节点,并且数据域赋值
	pM=(SLIST *)malloc(sizeof(SLIST));
	pM->data=y;//????
	pM->next=NULL;
	while(pCur)
	{
		if(pCur->data==x)
		{
			break;
		}
		//让pPre下移
		pPre=pCur;//////////////两个节点同时下移
		//让当前节点下移
		pCur=pCur->next;
	}

	//让新节点链接后继节点
	pM->next=pPre->next;
	//让前驱节点连接pM
	pPre->next=pM;
	return 0;
}
<img src="http://img.blog.csdn.net/20150420192920984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

//删除结点为y的链表结点
int SList_NodeDel(SLIST *pHead, int y)
{
	SLIST *pCur = NULL, *pPre = NULL;
	if (pHead == NULL)
	{
		return -1;
	}
	//环境准备
	pPre = pHead;
	pCur = pHead->next;

	while(pCur)
	{
		if (pCur->data == y)
		{
			break;
		}
		//让pPre下移
		pPre = pCur;
		//让当前节点下移
		pCur = pCur->next;
	}
	if (pCur == NULL)
	{
		printf("没有找到节点 y:%d", y);
		return -2;
	}
	//执行操作
	pPre->next = pCur->next;//让指针的指向越过将要删除的节点。
	free(pCur);
	return 0;
}
<img src="http://img.blog.csdn.net/20150420193118475?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk4OTUzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
int main()
{
	int ret = 0;
	SLIST *pHead = NULL;
	//创建 并打印
	pHead = Creat_SList();
	ret = SList_Print(pHead);

	//插入操作
	ret = SList_NodeInsert(pHead, 20, 19);
	ret = SList_Print(pHead);

	ret = SList_NodeDel(pHead, 19);
	ret = SList_Print(pHead);

	ret = SList_Destory(pHead);

	return 0;
}

时间: 2024-08-13 09:00:33

链表的基本操作之_增删改查的相关文章

论坛模块_版块管理_增删改查&amp;实现上下移动

论坛模块_版块管理1_增删改查 设计实体Forum.java public class Forum { private Long id; private String name; private String Description; private int position; //排序用的位置号 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNam

Hibernate入门_增删改查

一.Hibernate入门案例剖析:  ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private Integer age; private String name; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public Integer getAge()

MySQL基本操作--库\表增删改查

库的增删改查 增: create database db1; 删: drop database db1; 改: alter database db1 charset utf8; 修改库的字符集编码 查: show database; 查看所有的数据库 show create database db1\G; 查看数据库创建信息 表的增删改查 切换库: use db1     #要操作表文件,要先切换到对应的库下才能操作 增: create table tb1(id int); 删: drop ta

Mysql:数据操作_增删改查

数据操作 插入数据 insert into test (id,email,ip,state) values(2,'[email protected]','127.0.0.1','0'); 删除数据 delete from test where id = 1; 修改数据 update test set id='1',email='[email protected]' where id=1; 查数据 select * from test;                          取所有数据

java实现单链表增删改查

package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class Node<E> { private E e; //数据data private Node<E> next; //指向下一个节点 public Node() { } public Node(E e) { this.e = e; } public Node<E> getNext() { return next; } public void setNext(Node&l

Java描述数据结构之链表的增删改查

链表是一种常见的基础数据结构,它是一种线性表,但在内存中它并不是顺序存储的,它是以链式进行存储的,每一个节点里存放的是下一个节点的"指针".在Java中的数据分为引用数据类型和基础数据类型,在Java中不存在指针的概念,但是对于链表而言的指针,指的就是引用数据类型的地址. 链表和数组都是线性的数据结构,对于数组而言其长度是固定的,由于在内存中其是连续的,因此更适合做查找与遍历,而链表在内存中是并不是顺序存储的,但是由于其是通过"指针"构成的,因此在插入.删除时比较数

赵雅智_使用SQLiteDatabase提供的增删改查方法及事务

知识点详解:http://blog.csdn.net/zhaoyazhi2129/article/details/9026093 MainActivity.java,User.java,BaseDao.java,UserDao.java同上篇 http://blog.csdn.net/zhaoyazhi2129/article/details/28640195 UserDaoImple.java package com.example.android_sqlite.dao.impl; impor

Batis-iBatis基本操作(增删改查)

Batis-iBatis基本操作(增删改查) 时间 2014-04-10 17:55:20  CSDN博客 原文  http://blog.csdn.net/mazhaojuan/article/details/23354759 主题 MyBatis数据库测试技术 在上一篇iBatis博客中已介绍了如何 配置iBatis环境,这篇博客主要进行介绍一些iBatis的基本操作实现.iBatis的增删改操作都需要操作SqlMap,DAO层Manger,POJO 这几个类来实现. 下面分别介绍一下iBa

Android通讯录数据库介绍与基本操作(增删改查)

Android通讯录数据库介绍与基本操作(增删改查) 2014年2月21日 Android通讯录管理总结 这几天导师安排我一个任务就是研究一下Android通讯录获取联系人.通话记录.短信的方法,还有看看不同Android版本之间的异同是否能做到兼容之类的事情.Android通讯录这一块,我个人感觉是挺乱的,网上一堆关于查询本地数据库获取联系人的方法,但似乎都没有仔细说明数据有哪些重要的表,它们之间有什么联系.下面是本人查询资料总结的一下知识点,方便童鞋们以后用到. http://xys2891