单链表的操作

来源:互联网 发布:端口环路检测 编辑:程序博客网 时间:2024/06/06 10:51

单链表的操作

① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。

② 实现该线性表的遍历。

③ 在该单链表的第i个元素前插入一个整数。

④ 删除该单链表中的第i个元素,其值通过参数将其返回。

⑤ 建立两个按值递增有序的单链表,将他们合并成一个按值递减有序的单链表。要求利用原来的存储空间

#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 5typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;void CreateList(LinkList &L,int n){  //创建链表    LinkList pre,p;       L=(LinkList)malloc(sizeof(LinkList)); //头节点    pre=L;            for(int i=0;i<MAX;i++){          p=(LinkList)malloc(sizeof(LinkList));          scanf("%d",&(p->data));         pre->next=p;         pre=p;        }         pre->next = NULL;}void Output(LinkList &L){LinkList p;p=L->next;while(p){printf("%d  ",p->data);p=p->next;}}void AddElem(LinkList &L,int i,int e){//增加元素LinkList p,Newp;p=L;int j=0;while(p&&j<i-1){p=p->next;++j;}if(!p || j>i-1)exit(0);Newp=(LinkList)malloc(sizeof(LinkList));Newp->data=e;Newp->next=p->next;p->next=Newp;}int DelateElem(LinkList &L,int i,int e){//删除元素LinkList p,q;p=L;int j=0;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next) || j>i-1)exit(0);q=p->next;p->next=q->next;e=q->data;free(q);return e;}void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) //合并  {       LinkList pa,pb,pc;       pa=La->next;pb=Lb->next;       Lc=pc=La;       while(pa && pb){   if(pa->data<=pb->data){   pc->next=pa;pc=pa;pa=pa->next;   }   else{   pc->next=pb;pc=pb;pb=pb->next;   }   }   pc->next=pa?pa:pb;   free(Lb); }   int main(void){LinkList Linka,Linkb,Linkc;int e;printf("输入两组递增的整数\n");CreateList(Linka);Output(Linka);//输出新建的链表AddElem(Linka,1,2);Output(Linka);//输出添加元素后的链表DelateElem(Linka,2,e);Output(Linka);CreateList(Linkb);MergeList(Linka,Linkb,Linkc);Output(Linkc);return 0;}


0 0
原创粉丝点击