数据结构线性表的链式存储结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.实验目的

掌握线性表的链式存储结构设计与基本操作的实现。

2.实验内容与要求

⑴定义线性表的链式存储表示;

⑵基于所设计的存储结构实现线性表的基本操作;

⑶编写一个主程序对所实现的线性表进行测试;

⑷线性表的应用:①设线性表L1和L2分别代表集合A和B,试设计算法求A和B的并集C,并用线性表L3代表集合C;②设线性表L1和L2中的数据元素为整数,且均已按值非递减有序排列,试设计算法对L1和L2进行合并,用线性表L3保存合并结果,要求L3中的数据元素也按值非递减有序排列。

⑸设计一个一元多项式计算器,要求能够:①输入并建立多项式;②输出多项式;③执行两个多项式相加;④执行两个多项式相减;

3.数据结构设计

逻辑结构:线性结构

存储结构:链式存储结构

4.算法设计

#include

#include

#include

typedef struct LNode

{

int data;

struct LNode *next;

}LNode;

typedef struct Pnode

{ float coef;

int exp;

struct Pnode *next;

}Polynode;

void menu()

{

printf("******************************* **************\n");

printf("* 作者:Dick *\n");

printf("* 信计1001 xxxxxxxxxx *\n");

printf("*********************MENU**** ***************\n");

printf("1 求A和B的并集C\n");

printf("2 对A和B进行合并,用线性表C保存合并结果(有序)\n");

printf("3 建立一元多项式(两个)\n");

printf("4 两个一元多项式相加\n");

printf("5 两个一元多项式相减\n");

printf("6 退出程序\n");

}

void UnionList()

{

//先输入两个链表,然后判断是否为空,头结点还是要的。

int i;

LNode *List1,*List2,*List3,*p,*q,*r;

List1 = (LNode *)malloc( sizeof(LNode) );

List2 = (LNode *)malloc( sizeof(LNode) );

List3 = (LNode *)malloc( sizeof(LNode) );

List1->next = List2->next = List3->next = NULL;

printf("请输入第一个链表的数据(1~100),以0结束\n");

p = q = r = (LNode *)malloc( sizeof(LNode) );

while(1)

{

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

do

{

printf("请输入数据\n");

scanf("%d",&i);

if(i < 0 || i > 100)

printf("输入错误,请重新输入\n");

}while(i < 0 || i > 100);

p->data = i;

if(p->data == 0)

{

q->next = NULL;

free(p);

break;

}

q->next = p;

q = p;

}

//这个时候链表基本搞定,连接上就行了

List1 = r;

p = List1->next;

printf("\n您输入的链表为\n");

while(p != NULL)

{

i++;

printf("%d\t",p->data);

if(i == 5)

{

i = 0;

printf("\n");

}

p = p->next;

}

//第二个。。。

printf("请输入第二个链表的数据(1~100),以0结束\n");

p = q = r = (LNode *)malloc( sizeof(LNode) );

while(1)

{

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

do

{

printf("请输入数据\n");

scanf("%d",&i);

if(i < 0 || i > 100)

printf("输入错误,请重新输入\n");

}while(i < 0 || i > 100);

p->data = i;

if(p->data == 0)

{

q->next = NULL;

free(p);

break;

}

q->next = p;

q = p;

}

List2 = r;

p = List2->next;

printf("\n您输入的链表为\n");

while(p != NULL)

{

i++;

printf("%d\t",p->data);

if(i == 5)

{

i = 0;

printf("\n");

}

p = p->next;

}

//List3已经初始化了,现在先检测List1中是否有重复项

p = List1->next;

q = p->next;

while(p->next != NULL)

{

while(q != NULL)

{

if(p->data == q->data)

{

相关文档
最新文档