您的位置:首页 > 理论基础 > 数据结构算法

数据结构作业二(1)

2012-04-10 21:50 309 查看
/**************
实验二:单链表的基本操作

编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。
(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;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: