单链表的基本操作

  • 格式:wps
  • 大小:26.00 KB
  • 文档页数:6

#include <stdio.h>#include <stdlib.h>#define error 0typedef struct str //定义结构踢{int data;struct str *next;} londe,*linklist;void print(linklist &L); //打印出链表linklist create() //创建一个空表{linklist p;p=(linklist)malloc(sizeof(londe));p->next=NULL;return p;}void createlist(linklist &L) //创建链表{linklist p,r;int n=0;printf("请输入一组数字以-1为结束!!\n");p=r=(linklist)malloc(sizeof(londe));scanf("%d",&p->data);while(p->data!=-1){n=n+1;if(n==1)L=p;elser->next=p;r=p;p=(linklist)malloc(sizeof(londe));scanf("%d",&p->data);}r->next=NULL;}void deleted(linklist &L) //删除链表中某个数据{linklist p,cur;int mm;p=L;cur=p->next;printf("请输入要删除的数:");scanf("%d",&mm);while(cur!=NULL&&cur->data!=mm){p=cur;cur=cur->next;}if(cur==NULL)printf("找不到节点");else{p->next=cur->next;free(cur);}}void insert(linklist &L) //插入数据(头插法){linklist p;int nn;printf("请输入要插入的数据\n");scanf("%d",&nn);p=(linklist)malloc(sizeof(londe));p->data=nn;p->next=L;L=p;}void length(linklist &L){int sum=0;linklist p=L;while(p!=NULL){sum++;p=p->next;}printf("一共有%d个数字\n",sum);}void daoxuprint(linklist &L) //倒叙输出{linklist p=L;int a[100],sum=0;printf("收到圣诞节%d\n",p->data);while(p!=NULL){a[sum]=p->data;p=p->next;sum++;}for(int i=sum-1;i>=0;i--)printf("%d ",a[i]);}void search(linklist &L) //搜索某个数的位置{linklist p=L;int serch;printf("输入你要搜索的的数字");scanf("%d",&serch);if(p!=NULL&&p->data==serch)printf("你要找的数字在表头\n");elseprintf("无接点\n");while(p->next!=NULL){if(p->next->data==serch){printf("要找的数字的前驱为;%d\n",p->data);break;}p=p->next;}}void serprate(linklist &L ) //分开奇数和偶数{linklist p=L,t,head1,head2;linklist pa,pb;head1=create();head2=create();pa=head1;pb=head2;p=L;while(p!=NULL){t=create();if(p->data%2==0){t->data=p->data;pa->next=t;pa=pa->next;}else{t->data=p->data;pb->next=t;pb=pb->next;}p=p->next;}pa->next=NULL;pb->next=NULL;printf("分开奇数和偶数之后为:\n");printf("偶数链表为:\n");print(head1->next);printf("奇数链表为:\n");print(head2->next);}void deletesame(linklist &L) //删除相同的数据{linklist p,q;p=L;q=L->next;while(q){if(p->data==q->data){p->next=q->next;free(q);q=p->next;}else{p=q;q=q->next;}}print(L);}void print(linklist &L) //打印出链表{linklist p;p=L;if(p!=NULL)do{printf("%d ",p->data);p=p->next;}while(p->next!=NULL);printf("%d",p->data);printf("\n");}int main(){linklist L;int dd;printf("请输入菜单:\n");printf("1:输入一组数据创建链表,以-1为结束!!\n");printf("2:删除一个数!\n");printf("3:插入一个数据\n");printf("4:计算链表的长度\n");printf("5:倒叙输出链表\n");printf("6:奇数和偶数分开操作\n");printf("7:删除相同的数据\n");while(scanf("%d",&dd),dd){switch(dd){case 1: createlist(L);print(L);break;case 2: deleted(L);print(L);printf("删除成功!!\n");break;case 3: insert(L);print(L);printf("插入成功!!\n");break;case 4:length(L);print(L);break;case 5: daoxuprint(L);break;case 6:serprate(L);break;case 7:deletesame(L);break;}printf("请输入菜单:\n");printf("1:输入一组数据创建链表,以-1为结束!!\n");printf("2:删除一个数!\n");printf("3:插入一个数据\n");printf("4:计算链表的长度\n");printf("5:倒叙输出链表\n");printf("6:奇数和偶数分开操作\n");printf("7:删除相同的数据\n");}return 0;}作者:郑州轻工业学院计算机科学与技术10-01 QQ389878212。