1、插入、删除、查找等运算,能够灵活应用链表这种数据结构,深入对链表链式结构的了解。三源程序代码#includestdlib.htypedef int Elemtype;typedef int Status;typedef struct node/定义存储节点 int data;/数据域 struct node *next;/结构体指针 *linklist,node;/结构体变量,结构体名称linklist creat (int n)/创建单链表 linklist head,r,p;/定义头指针r,p,指针 int x,i; head=(node *)malloc(sizeof(node);/生成
2、头结点 r=head;/r指向头结点 printf(输入数字:n); for(i=n;i0;i-)/for 循环用于生成第一个节点并读入数据 scanf(%d,&x); p=(node *)malloc(sizeof(node); p-data=x;/读入第一个节点的数据 r-next=p;/把第一个节点连在头结点的后面 r=p;/循环以便于生成第二个节点 r-next=0;/生成链表后的断开符return head;/返回头指针void output (linklist head)/输出链表 linklist p; p=head-next; do printf(%3d,p-data); p=
3、p- while(p);Status insert ( linklist &l,int i, Elemtype e)/插入操作 int j=0;linklist p=l,s; while(ji-1) return -1; else s=(node *)malloc(sizeof(node); s-data=e;next=p-next=s; return 1;Status delect ( linklist &l,int i, Elemtype &e)/删除操作linklist p=l,q;while(jnext) p=p-if(!p-next | jelse q=p-next=q- e=q-d
4、ata; free(q); return 1;void combine(linklist la,linklist lb)/合并单链表 node *pa,*pb,*pc; linklist lc; pa=la- pb=lb- lc=pc=la; while(pa & pb) if(pa-datadata) pc-next=pa; pc=pa; pa=pa- elsepc-next=pb;pc=pb;pb=pb- pc-next=pa?pa:pb; free(lb); Status GetElem(linklist l,int i,Elemtype &e )/查找操作 int j; p=l- j=
5、1; while(p & j return e;void main() linklist la,lb; int n; int i,j; Elemtype e;请输入第一个链表:输入链表元素的个数: scanf(n); la=creat(n);输出链表: output(la);请输入要查找元素的位置:i); j=GetElem(la,i,e);所要查找的元素是%dn,j);请输入插入位置和元素:%d%di,&e); insert(la,i,e);插入后的链表:printf(请输入要删除的位置:scanf(delect(la,i,e);删除的那个元素是:%dn,e);输出删除后的顺序表:output(la);请输入第一个非递减链表:请输入第二个非递减链表: lb=creat(n); output(lb);combine(la,lb);输出合并后的链表:运行结果如下:六、结果分析与思考关于单链表的建立要比顺序表难懂,单链表的建立有头插法和尾插法两种,我选用的是尾插法,尾插法较之头插法更为简单和使用,一定要熟练使用。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1