linux数据结构实验报告,实验一 两个顺序表表的合并

目的:

**1.了解VC++环境的组成 **

2.理解线性表的概念、特点、和抽象数据类型,掌握顺序表的定义与实现

内容:

创建线性表LA,LB。合并成LC表,并删除重复元素,保持有序。

源码:

#include

#include

struct Pro1

{

int a;

struct Pro1 *next;

};

typedef struct Pro1 NODE;

NODE *LA();

NODE *LB();

NODE *LC(NODE *LA,NODE *LB);

NODE *Delete_same(NODE *head);

NODE *Delete_same(NODE *head);

int Length(NODE *head);

void Diaplay(NODE *head);

NODE *LA()

{

NODE *head,*p,*tail;

head=p=tail=(NODE *)malloc(sizeof(NODE));

printf("In put Linked list 1: ");

while(scanf("%d",&p->a)!=EOF)

{

tail->next=p;

tail=p;

p=(NODE *)malloc(sizeof(NODE));

}

tail->next=NULL;

return head;

}

NODE *LB()

{

NODE *head,*p,*tail;

head=p=tail=(NODE *)malloc(sizeof(NODE));

printf("In put Linked list 2: ");

while(scanf("%d",&p->a)!=EOF)

{

tail->next=p;

tail=p;

p=(NODE *)malloc(sizeof(NODE));

}

tail->next=NULL;

return head;

}

NODE *LC(NODE *LA,NODE *LB)

{

NODE *head,*p,*tail;

head=p=tail=(NODE *)malloc(sizeof(NODE));

while(LA)

{

p->a=LA->a;

LA=LA->next;

tail->next=p;

p=(NODE *)malloc(sizeof(NODE));

}

while(LB)

{

p->a=LB->a;

LB=LB->next;

tail->next=p;

tail=p;

p=(NODE *)malloc(sizeof(NODE));

}

tail->next=NULL;

return head;

}

NODE *Delete_same(NODE *head)

{

NODE *p,*q,*temp;

p=head;

while(p->next)

{

q=p;

while(q->next)

{

if(p->a==q->next->a)

{

temp=q->next;

q->next=temp->next;

free(temp);

}

else

{

q=q->next;

}

}

p=p->next;

}

return head;

}

int Length(NODE *head)

{

int size=0;

while(head!=NULL)

{

size++;

head=head->next;

}

return size;

}

NODE *Sort(NODE *head)

{

int flag=0;

NODE *p,*q,*temp;

temp=p=head;

q=head->next;

int length=Length(head);

int i;

for(i=0;i

{

flag=0;

while(q!=NULL)

{

if(p->a>q->a&&flag==0)

{

p->next=q->next;

q->next=p;

head=q;

q=p->next;

break;

}

else if(p->a>q->a&&flag==1)

{

p->next=q->next;

q->next=p;

temp->next=q;

q=p->next;

temp=temp->next;

flag=1;

}

else

{

temp=p;

p=p->next;

q=p->next;

flag=1;

}

}

temp=p=head;

q=p->next;

}

return head;

}

void Display(NODE *head)

{

NODE *p;

p=head;

while(p)

{

printf("%d ",p->a);

p=p->next;

}

}

int main()

{

NODE *pLA;

NODE *pLB;

NODE *pLC;

pLA=LA();

pLB=LB();

pLC=LC(pLA,pLB);

printf("Linked list LA: ");

Display(pLA);

printf("\nLinked list LB: ");

Display(pLB);

printf("\nAfter Delete same: ");

Delete_same(pLC);

Display(pLC);

printf("\nLC: ");

pLC=Sort(pLC);

Display(pLC);

return 0;

}

心得:

初步了解了Linux系统,掌握了线性表,可以在Linux终端中编译c文件并运行。

310da82e559531b0254479cb9f8e1adc-wm

4b79b05e919154fed1dc6b8506d69c82-wm

f5a19c6389861b08d74e6f0bff80205d-wm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值