数据结构线性表的链式存储结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)
{