单链表操作的实验课

来源:互联网 发布:淘宝亿次元 编辑:程序博客网 时间:2024/05/22 16:58

单链表的操作

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

② 实现该线性表的遍历。

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

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

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

//链表的建立,插入,删除 ,合并链表;#include <stdio.h>#include <stdlib.h>typedef struct Link{int data;struct Link *next;}LNode,*LinkList;void Create_Link(LinkList &L){//链表的建立 LinkList p,cur;L=(LinkList)malloc(sizeof(LNode));int n;cur=L;printf("数据个数:"); scanf("%d",&n);for (int i=1;i<=n;i++){p=(LinkList)malloc(sizeof(LNode));scanf("%d",&p->data);cur->next=p;cur=p;}cur->next=NULL;}void Display_Link(LinkList L){//链表的遍历 LinkList cur;cur=L->next;while(cur){printf("%d ",cur->data);cur=cur->next;}putchar('\n');}void Insert_Link(LinkList &L,int i,int e){//插入到第i个后面 int j=1;LinkList cur;cur=L->next;while(j<=i-2 && cur){cur=cur->next;j++;}if(j!=i-1){printf("输入位置不合法.\n");return ;}LinkList p=(LinkList)malloc(sizeof(LNode));p->data=e;p->next=cur->next;cur->next=p;}void Delete_Link(LinkList &L,int i){//删除第i个位置的数,并用e来返回LinkList s;LinkList cur;int j=1;cur=L->next;while(j<=i-2 && cur->next){cur=cur->next;j++;}if(j!=i-1){printf("输入位置不合法.\n");return ; }s=cur->next;cur->next=s->next;printf("删除的数为:%d\n",s->data);free(s);}void Destroy(LinkList L){//销毁 LinkList cur,p;cur=L->next;while(cur){p=cur;cur=cur->next;free(p);}printf("操作结束.\n");}void Merge(LinkList L,LinkList M,LinkList &K){//两个链表合并,头插LinkList cur1,cur2,temp;K=(LinkList)malloc(sizeof(LNode));K->next=NULL;cur1=L->next;cur2=M->next;while(cur1 && cur2){if(cur1->data<cur2->data){temp=cur1->next;cur1->next=K->next;K->next=cur1;cur1=temp;}else{temp=cur2->next;cur2->next=K->next;K->next=cur2;cur2=temp;}}while(cur1){temp=cur1->next;cur1->next=K->next;K->next=cur1;cur1=temp;}while(cur2){temp=cur2->next;cur2->next=K->next;K->next=cur2;cur2=temp;}}int main(){int i,e;LinkList L,M,K;Create_Link(L);Display_Link(L);Create_Link(M);Display_Link(M);Merge(L,M,K);Display_Link(K);printf("输入插入的位置和数据:");scanf("%d %d",&i,&e);Insert_Link(K,i,e);Display_Link(K);printf("输入要删除数据的位置:");scanf("%d",&i);Delete_Link(K,i);Destroy(K);return 0;}

小白学习链表,但请多多指点,大神不喜勿喷

0 0