数据结构实验报告(C语言)单链表的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称数据结构与算法
项目名称单链表的基本操作
班级
学号
姓名
实验日期
格式要求
实验报告注意格式规范,要求在word中编写,文中不要有空行,统一使用A4页面。
页边距:上2.5cm、下2cm、左2.5cm、右2cm。
标题:宋体、四号字、加粗、1.5倍行距。
正文:宋体、小四号字、1.2倍行距。
一、实验目的与要求:
(一)实验目的
1.理解排序算法基本思想。
2.掌握在顺序表上各种排序算法的实现。
3.对线性表排序算法的时间复杂度进行分析。
4.理解顺序表数据结构的特点(优缺点)和适用环境。(二)实验要求
1.定义一链表类型,并定义带有头结点的单链表。
2.将教材中链表的建立、初始化、插入、删除等函数实现。
3.由主函数按照用户要求对各个链表操作访问。
4.每次操作之前要有明确的说明,操作后要输出操作结果。
5.分析顺序表链表的插入、删除、查找的时间和空间复杂度。
二、实验方法:(代码)
#include
#include
typedef struct Pnode
{
int coef;
int exp;
struct Pnode*next;
}Polynode;
typedef struct node
{
int data;
struct node*next;
}LinkList;
//多项式链表的生成
Polynode*PLcreate(Polynode*H)
{
Polynode*R,*S;
int c,e;
H=(Polynode*)malloc(sizeof(Polynode));
H->exp=-1;
H->next=NULL;//建立空多项式单链表
R=H;//R始终指向单链表的尾,便于尾插法建表
printf("请输入多项式的系数和指数:");
scanf("%d%d",&c,&e);//键入多项式的系数和指数项
while(e!=-1)//若e=-1,则掉膘多项式的输入结束
{
S=(Polynode*)malloc(sizeof(Polynode));
S->coef=c;
S->exp=e;
S->next=NULL;//生成新结点并赋值
R->next=S;//在当前表尾做插入
R=S;
//printf("请继续输入多项式的系数和指数:");
scanf("%d%d",&c,&e);
}
return H;
}
//两个一元多项式相加
Polynode*polyadd(Polynode*A,Polynode*B)
{
Polynode*p,*q,*temp,*pre;
int sum;
p=A->next;
q=B->next;//p和q分别指向A和B多项式来拿表中的第一个结点
pre=A;//pre指向*p的前驱结点
free(B);//释放多项式B的头结点空间
while(p!=NULL&&q!=NULL)//当两个多项式均未扫描结束时
{
if(p->exp
pre=p;
p=p->next;
}
else if(p->exp==q->exp)//若指数相等,则相应的系数相加
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
B=q;
pre=p;
p=p->next;
q=q->next;
free(B);
}
else
{
temp=p;
p=p->next;
pre->next=p;
free(temp);
B=q;
q=q->next;
free(B);
}
}
else
{
B=q;
q=q->next;
B->next=p;
pre->next=B;
pre=pre->next;
}
}
if(q!=NULL)
pre->next=q;
//return(A);
print_Pn(A);
}
int print_Pn(Polynode*A)//输出链表
{
printf("您的链表为:");
printf("%d",A->exp);
while(A->next!=NULL)
{printf("%d%d",A->next->coef,A->next->exp);
A=A->next;
}
printf("\n");
}
//头插法建单链表
LinkList*CreatlistH(LinkList*L)
{
LinkList*head,*S;
int n;
L=(LinkList*)malloc(sizeof(LinkList));
head=L;
L->next=NULL;
scanf("%d",&n);
while(n!=-1)