数据结构C语言版之链表的操作
//链表操作: #include<stdio.h> #include<stdlib.h> typedef struct pNode{ int data; struct pNode *next; }*linklist,node; void creat(linklist &la,int n) { linklist p,pre; la=(linklist)malloc(sizeof(node)); pre=la; for(int i=0;i<n;i++) { p=(linklist)malloc(sizeof(node)); scanf("%d",&p->data); pre->next=p; pre=p; } pre->next=NULL; } void traverse(linklist &la) { linklist p; p=la->next; printf("输出这一组数:\n"); while(p) { printf("%5d",p->data); p=p->next; } printf("\n\n"); } void insert(linklist &L,int i,int e) { linklist p,q; int j=0; printf("请输入要插入的位置:\n"); scanf("%d",&i); printf("请输入要插入的元素:\n"); scanf("%d",&e); q=(linklist)malloc(sizeof(node)); q->data=e; p=L; while(p->next&&j<i-1) { p=p->next; j++; } if(!p->next||j>i-1) exit(0); q->next=p->next; p->next=q; } void listdelete(linklist &L,int i,int &e) { linklist p,q,r; p=L; int j=0; printf("请输入要删除的位置:\n"); scanf("%d",&i); while(p->next&&j<i-1) { p=p->next; j++; } if(!p->next||j>i-1) exit(0); q=p->next; e=q->data; p->next=q->next; r=q; free(r); printf("所删除的元素为:%d\n\n",e); } void merger(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 if(pa->data>pb->data) { pc->next=pb; pc=pb; pb=pb->next; } else { pc->next=pa;pc=pa;pa=pa->next;pb=pb->next; } } if(pa) pc->next=pa; if(pb) pc->next=pb; } int main() { linklist L,la,lb,lc; int x,e,i,n,m,j,k; /*- printf("输入元素个数:\n"); scanf("%d",&x); printf("请输入%d个元素:\n",x); creat(L,x); traverse(L); insert(L,i,e); traverse(L); listdelete(L,n,m); traverse(L);*/ printf("输入la链表元素个数:\n"); scanf("%d",&j); printf("请输入%d个元素:\n",j); creat(lb,j); printf("输入lb链表元素个数:\n"); scanf("%d",&k); printf("请输入%d个元素:\n",k); creat(la,k); merger(la,lb,lc); traverse(lc); return 0; }
不为失败找原因,要为成功找方法!