数据结构实验报告(C语言)单链表的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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->expexp)//若果P指向的多子昂是的指数小于q的指数,指针p后移{

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)

相关文档
最新文档