代码改变世界

第一次数据结构作业

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;
}