汇总C语言单链表的常见操作方法

网址简介:未填写

更新时间:10个月前

访问次数:108

详细介绍

链表的操作是我们学习过程中的难点知识,因为在C语言学习过程中,许多结构图式都可以在链表的基础上进行扩展,本文是爱站技术频道小编汇总C语言单链表的常见操作方法,一起跟着进入下文学习吧!

实例如下:

  #include<stdio.h>   #include<stdlib.h>   //定义单链表结构体   typedef int ElemType;   typedef struct Node   {   ElemType data;   struct Node *next;   }LNode,*LinkList;   //创建单链表   void Build(LinkList L)   {   int n;   LinkList p,q;   p=L;   printf("请输入n和n个元素:\n");   scanf("%d",&n);   while(n--)   {   q=(LinkList)malloc(sizeof(LNode));   scanf("%d",&q->data);   q->next = NULL;   p->next=q;   p=q;   }   }   //求单链表的长度   void LinkLength(LinkList L)   {   int num = 0;   LinkList p;   p=L->next;   while(p)   {   num++;   printf("%3d",p->data);   p=p->next;   }   printf("长度为:%d",num);   }   //查找前驱结点   void Find(LinkList L,int x)   {   LinkList p,q;   p=L;   while(p->next &&p->next->data!=x)   p=p->next;   if(p->next)   printf("%d的前驱结点为%d",x,p->data);   else   printf("没有找到");   }   //删除结点值为x的元素   void Delete(LinkList L,int x)   {   LinkList p,q;   p=L;   while(p->next && p->next->data!=x)   p=p->next;   if(p->next)   {   q=p->next;   p->next=q->next;   free(q);   }   printf("删除成功!!");   }   //将表中的元素逆置   void Reverse(LinkList L)   {   LinkList p,q;   p=q=L->next;   L->next=NULL;   while(p)   {   q=q->next;   p->next=L->next;   L->next=p;   p=q;   }   printf("逆置成功!!");   }   //对单链表排序   void sort(LinkList L)   {   LinkList p,q;   int temp;   p=L;   for(p=L;p->next!=NULL;p=p->next)   {   for(q=p->next;q!=NULL;q=q->next)   if(p->data>q->data)   {   temp=p->data;   p->data=q->data;   q->data=temp;   }   }   printf("排序成功!");   }   //删除相同元素   void Deletesameelem(LinkList L)   {   LinkList p,q,s;   p=L;   q=L->next;   while(q->next)   {   if(q->data ==q->next->data)   {   p->next=q->next;   s=q;   q=q->next;   free(s);   }   else   {   p=p->next;   q=q->next;   }   }   printf("删除成功!!");   }   //在升序链表中,插入新的元素,扔有序   void Insert(LinkList L,LinkList p)   {   LinkList s;   s=L;   while(s->next && s->next->data<p->data)   s=s->next;   p->next=s->next;   s->next=p;   }   //提示界面显示   void Tips()   {   printf("\n");   printf("根据按键选择相应的操作:\n");   printf("<1>输出单链表及其长度:\n");   printf("<2>查找值为x的直接前驱结点:\n");   printf("<3>删除值为x的结点:\n");   printf("<4>将表中的元素逆置:\n");   printf("<5>将单链表由小到大进行排序:\n");   printf("<6>删除表中相同的元素:\n");   printf("<7>在升序链表中插入元素x:\n");   printf("<0>退出:\n");   }   //主函数   void main()   {   int op,x;   LinkList L,p;   L = (LinkList)malloc(sizeof(LNode));   L->next=NULL;   L->data=-1;   Build(L);   Tips();   scanf("%d",&op);   while(op)   {   switch(op)   {   case 1:LinkLength(L);   break;   case 2:   printf("请输入要查找的元素x:\n");   scanf("%d",&x);   Find(L,x);   break;   case 3:   printf("请输入要删除的元素x:\n");   scanf("%d",&x);   Delete(L,x);   break;   case 4:Reverse(L);   break;   case 5:sort(L);   break;   case 6:Deletesameelem(L);   break;   case 7:   printf("请输入要插入的元素X:\n");   scanf("%d",&x);   p=(LinkList)malloc(sizeof(LNode));   p->data=x;   Insert(L,p);   printf("插入成功!!!\n\n");   break;   }   scanf("%d",&op);   }   }

以上就是关于汇总C语言单链表的常见操作方法,C语言是一门学问,你只有在学习了很多的专业知识之后才能操作好,建议你常来爱站技术频道进行学习。 

请发表您的评论