数据结构作业二(1)
2012-04-10 21:50 璋廊 阅读(220) 评论(0) 编辑 收藏 举报/************** 实验二:单链表的基本操作 编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。 (1)建立一个带头结点的单链表。 (2)计算单链表的长度,然后输出单链表。 (3)查找值为x的直接前驱结点q。 (4)删除值为x的结点。 (5)把单向链表中元素逆置(不允许申请新的结点空间)。 (6)利用(1)建立的链表,实现将其分解成两个链表,其中一个全部为奇数 ,另一个全部为偶数(尽量利用已知的存储空间)。 ****************/ #include<stdio.h> #include<stdlib.h> typedef struct point { int data; struct point *next; }Link,*List; List built(List head,int n)//建立单链表; { int i,a; List h,s,t; h=head; t=h; for(i=0;i<n;i++) { scanf("%d",&a); s=(List)malloc(sizeof(Link)); s->data=a; t->next=s; t=s; } s->next=NULL; return h; } void print(List head)//输出量表元素: { List p,h; h=head; p=h->next; while(p) { printf("%d ",p->data); p=p->next; } printf("\n"); } void Delete(List head,int x)//删除链表中的指定的元素: { List p,q,h; h=head; p=h->next; while(p) { if(p->data==x) { q=p; h->next=q->next; free(q); break; } h=h->next; p=p->next; } } List Inver(List head)//把链表中的元素导致; {//把指针反向改了; List h,p,q,h1; //h1=h=(List)malloc(sizeof(Link)); h1=h=head; p=head->next; while(p) { q=p->next; p->next=h; h=p; p=q; } q=h1->next; q->next=NULL; h1->next=h; return h1; } List find(List head) { List h,p,t,s,q; h=(List)malloc(sizeof(Link));//奇数的 t=h; p=head->next; s=head; while(p) { if(p->data%2==1) { q=p; t->next=q; s->next=q->next; p=p->next; t=t->next; q->next=NULL; } else { p=p->next; s=s->next; } } return h; } int main() { int n,x; List head,h,h1,h2; scanf("%d",&n); h=(List)malloc(sizeof(Link)); head=built(h,n); printf("新建好的链表!\n"); print(head); printf("删除值为x的节点!\n"); scanf("%d",&x); Delete(head,x); printf("删除后的链表!\n"); print(head); printf("将链表逆置!\n"); h1=Inver(head); print(h1); h2=find(head); printf("奇数链表!\n"); print(h2); printf("偶数链表!\n"); print(head); return 0; }