****链表概念创建单链表插入链表结点删除链表结点输出链表结点**1.链表概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,链表比较方便插入和删除操作。infoinfoinfoinfoinfo^info**1.链表概念typedefstructlist{intinfo;structlist*next;}SLIST;(2)链表的C语言结构:通过指向链表第一个结点的指针访问链表。结点间通过存储在每个结点中的链接指针成员来访问。链表中最后一个结点的链接指针被设置为NULL,标识链表结尾。数据成员的数目无法事先确定。对数据快速插入与删除。(1)什么时候用链表?(3)使用链表的方法:****链表概念创建单链表插入链表结点删除链表结点输出链表结点**2.创建单链表infoinfoinfoinfo^/*创建带头结点的单链表*/SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;iN;i++){q=(SLIST*)malloc(sizeof(SLIST));q-info=a[i];p-next=q;p=q;}p-next=NULL;returnh;}hpqinfo****链表概念创建单链表插入链表结点删除链表结点输出链表结点**3.插入链表结点在已知q指针所指向的结点后插入一个结点e其代码实现为:p=(SLIST*)malloc(sizeof(SLIST));p-info=e;p-next=q-next;q-next=p;infoinfoesp**3.插入链表结点voidinsert(SLIST*h,inti,inte)/*在q指针结点后面插入结点*/{SLIST*p=h,*s;intj=1;s=(SLIST*)malloc(sizeof(SLIST));/*p指向的生成一个新结点*/s-info=e;/*向该结点的数据域赋值e*/while(p-nextji)/*遍历寻找第i个元素*/{p=p-next;++j;}if(!(p-next)||ji)printf(插入超界\n);/*第i个元素不存在*/s-next=p-next;p-next=s;}****链表概念创建单链表插入链表结点删除链表结点输出链表结点**4.删除链表结点infoinfopinfoqq=p-next;/*使q指针指向被删除结点*/p-next=q-next;????/*将q的后继赋值给p的后继*/?free(q);/*释放q*/**4.删除链表结点/*操作结果:删除链表中的第i个数据元素*/voidDelete(SLIST*h,inti){intj;SLIST*p,*q;p=h;j=1;while(p-nextji)/*遍历寻找第i个元素*/{p=p-next;++j;}if(!(p-next)||ji)printf(第%d个元素不存在,i);q=p-next;p-next=q-next;/*将q的后继赋值给p的后继*/free(q);/*让系统回收结点,释放内存*/}****链表概念创建单链表插入链表结点删除链表结点输出链表结点**4.删除链表结点vo