第一次数据结构作业
2012-03-27 12:45 璋廊 阅读(285) 评论(0) 编辑 收藏 举报*建立单链表;长度为n的量表; */ #include<stdio.h> #include<stdlib.h> typedef struct point //建立结构体 { int data; struct point *next; }Linkpoint ,*LinkList; LinkList built(int n)//建立单链表 { LinkList h,s,r; h=(LinkList)malloc(sizeof(Linkpoint));//头结点; r=h; int i; for(i=1;i<=n;i++) { s=(LinkList)malloc(sizeof(Linkpoint)); s->data=i; r->next=s; r=s; } s->next=NULL;//末节点; return h;//换回头节点 } void print(LinkList head)//输出链表; { LinkList p; p=head; p=p->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } //主函数; int main() { int n; LinkList head; scanf("%d",&n); head=built(n); print(head); return 0; } /* 实现链表中插入一个元素; n表示链表长度,x表示要插入的元素,k表示插入的位置; */ #include<stdio.h> #include<stdlib.h> typedef struct point { int data; struct point *next; }Linkpoint,*LinkList; LinkList built(int n)//建立链表长度为n; { LinkList h,s,r; h=(LinkList)malloc(sizeof(Linkpoint)); r=h; int i; for(i=1;i<=n;i++) { s=(LinkList)malloc(sizeof(Linkpoint)); s->data=i; r->next=s; r=s; } s->next=NULL; return h; } void insert(int x,int k,LinkList h)//出入元素x,在k位置; { int i; i=0; LinkList p,r; r=(LinkList)malloc(sizeof(Linkpoint)); p=h; while(p!=NULL) { p=p->next; i++; if(i==k)//找到第k个位置插入x; { r->next=p->next; r->data=x; p->next=r; break; } } } void print(LinkList head)//输出链表元素: { LinkList p; p=head->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } int main() { int n,x,k; LinkList head; scanf("%d%d%d",&n,&x,&k); head=built(n); insert(x,k,head); print(head); return 0; } /*长度为n的单表;删除第k个元素; */ #include<stdio.h> #include<stdlib.h> typedef struct point { int data; struct point *next; }Linkpoint,*LinkList; LinkList built(int n)//建立链表长度为n; { LinkList h,s,r; h=(LinkList)malloc(sizeof(Linkpoint)); r=h; int i; for(i=1;i<=n;i++) { s=(LinkList)malloc(sizeof(Linkpoint)); s->data=i; r->next=s; r=s; } s->next=NULL; return h; } void Delete(int k,LinkList h)//删除第k个元素; { LinkList p,r; int i=1; p=h->next; while(p!=NULL) { if(i==k-1) { r=p->next; p->next=r->next; free(r); break; } p=p->next; i++; } } void print(LinkList head)//输出链表元素: { LinkList p; p=head->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } int main() { int n,x,k; LinkList head; scanf("%d%d",&n,&k); head=built(n); Delete(k,head); print(head); return 0; } /*输入n个数,用单链表储存,对这n个数进行排序; */ #include<stdio.h> #include<stdlib.h> typedef struct point { int data; struct point *next; }Link,*List; List built(int n)//建立一个单表; { int x,i; List h,s,r; h=(List)malloc(sizeof(Link)); r=h; for(i=0;i<n;i++) { s=(List)malloc(sizeof(Link)); scanf("%d",&x); s->data=x; r->next=s; r=s; } s->next=NULL;//不要忘了最后的指针赋空值; return h;//还回头结点 } void Sort(List head)//对单链表进行排序; { List p,q; int t; for(p=head,p=p->next;p->next;p=p->next) { for(q=head,q=q->next;q->next!=NULL;q=q->next)//核心代码 if(q->data>q->next->data)//if前一个大于后一个、交换; { t=q->data; q->data=q->next->data; q->next->data=t; } } } void print(List head)//输出单链表; { List p; p=head->next; while(p) { printf("%d ",p->data); p=p->next; } printf("\n"); } int main() { int n; List head; scanf("%d",&n); head=built(n); Sort(head); print(head); return 0; } /*两个有序单链表,合并后依然有序; */ #include<stdio.h> #include<stdlib.h> typedef struct point//建立结构体 { int data; struct point *next; }Linkpoint,*LinkList; LinkList built(int n)//建立单链表 { LinkList head,s,r; int i; head=(LinkList)malloc(sizeof(Linkpoint));//建立头结点 r=head; i = 1; int x; for(i = 1;i <= n; i++)//建立链表和给链表赋值; { s=(LinkList)malloc(sizeof(Linkpoint)); scanf("%d",&x); s->data = x; r->next = s; r=s; } r->next = NULL; return head;//还回头结点; } LinkList MergeList(LinkList la,LinkList lb) {//把两个有序单链表合成一个有序链表; LinkList pa,pb,pc,lc; pa = la->next;//接收头结点; pb = lb->next;//接收头结点 pc = la;//接收头结点 lc = pc;//保存头结点 while(pa&&pb)//将pa 、pb结点按大小依次插入Lc中 { 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;//pc与没有到头的节点连接; free(lb);//释放不用空间; return lc; } void print(LinkList lc)//输出lc链表 { LinkList p; p=lc->next; while(p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { int n,m; LinkList la,lb,lc; scanf("%d",&n);//la链表长度为n; la = built(n);//建立la链表 scanf("%d",&m);//lb链表长度为m; lb = built(m);//建立lb链表 lc = MergeList(la,lb);//合并la和lb; print(lc);//输出lc; return 0; }