栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现数据结构单链表增删改查

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现数据结构单链表增删改查

#include
#include
typedef int ElemType;
typedef struct LNode
{
	ElemType data;
	struct LNode *next;   //指向下一节点 
}LNode,*linkList;         //linkList表示结构体指针类型,链表的类型 



//头插法新建链表
linkList CreatList1(linkList &L) //list_Insert
{
	LNode *s;
	int x;
	L=(linkList)malloc(sizeof(LNode));//带头结点的链表
	L->next=NULL;//L->data里面没有东西
	scanf("%d",&x);//从标准输入读取东西
	//3 4 5 6 7 9999
	while(x!=9999)
	{
		s=(LNode*)malloc(sizeof(LNode));//申请一个新空间给s,强制类型转换
		s->data=x;//把读取到的值,给新空间的data成员            
		s->next=L->next;//让新结点的next指针指向链表第一个元素 (第一个放我们数据的元素)
		L->next=s;//让s作为第一个元素 
	 } 
	 return L;
}


//尾插法新建链表;
linkList CreatList2 (linkList &L) //list_Tail
{
	int x;
	L=(linkList)malloc(sizeof(LNode));//带头结点的链表
	LNode* s;
	LNode*r=L;//r代表链表表尾结点,指向链表尾部 ,初始l相当于r 
	//输入3 4 5 6 7 9999
	scanf("%d",&x);
	while(x!=9999) 
	{
		s=(LNode*)malloc(sizeof(LNode));
		s->data=x;//把读取到的值,给新空间的data成员
		r->next=s;//让尾部结点指向新结点 
		r=s;//r指向新的表尾结点   
        scanf("%d",&x);
	 } 
	 r->next=NULL;//尾结点next指针赋值为NULL 
	 return L;
}



//查找对应位置的值
linkList GetElem(linkList L,int i)
{
	int j = 1;
	LNode*p=L->next;//让P指向第一个结点 
	if(i ==0)
	{
		return L;//返回头结点 
	}
	if(i<1)
	{
		return NULL;//i是负值就返回空 
	}
	while(p&&jnext;
	    j++;
	}
	return p;
}

//查找值对应的位置
linkList LocateElem(linkList L,int e)
{
	LNode* p=L->next;
	while(p != NULL&& p->data!=e)
	{
		p=p->next;
	}
	
	return p;
 } 



//新结点插入第i个位置 
bool ListFront_Insert(linkList &L,int i,int e)
{
	LNode* p=GetElem(L,i-1);//拿到插入位置前一个位置地址 
	if(p==NULL)
	{
		return false;//i不对 
	}
	LNode*s=(LNode*)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;
}



//删除第i个位置元素
bool ListDelete(linkList &L,int i)
{
	LNode*p=GetElem(L,i-1);//获得第i个位置前一个结点地址
	if(NULL==p)
	{
		return false;
	}
	 LNode* q=p->next;//q指针指向第i个结点 
	p->next=q->next;
	free(q);
	q = NULL;
	return true;
	
}

//打印链表函数 
void PrintList(linkList L)
{
	L=L->next;
	while (L!=NULL)
	{
		printf("%-3d",L->data);//打印当前结点数据 
		L=L->next;//指向下一结点 
	}
	printf("n");
}

int main()
{
	linkList L;         //链表头,linkList是结构体指针类型 
	linkList search;   //用来存储拿到的某一个节点 
  //CreatList1(L);    //输入数据可以是3 4 5 6 7 9999 
	CreatList2(L);    //输入数据可以为3 4 5 6 7 9999 
	PrintList(L);     //链表打印
	search=GetElem(L,3);//查找链表第二个结点的地址 
	if(search!=NULL)
	{
		printf("按序查找成功n");
		printf("%dn",search->data);//查找链表第二个结点元素值 
	}
	search=LocateElem(L,6);//按值查找 
	if(search!=NULL)
	{
		printf("按值查找成功n");
		printf("%dn",search->data);//查找链表data是6的结点地址 
	}
	ListFront_Insert(L,1,99);//新结点插入第i个位置 
	PrintList(L);
	ListDelete(L,4);//删除第i个结点 
	PrintList(L);
	return 0;
	
}
 







转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号