实验总结报告线性表_实验报告线性表

2020-02-27 其他工作总结 下载本文

实验总结报告线性表由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验报告线性表”。

实验总结报告—栈和队列

学号:

姓名: 时间:

一、目的 1.做实验的目的加深对线性表的理解,学会定义线性表的存储结构,掌握线性表的基本操作。

2.撰写实验报告的目的对本次实验情况进行总结,加强对实验内容的理解,对实验过程有一个系统的认识,从中获得本次试验的经验,并对实验结果进行适当的分析,加深对栈和队列的理解和认识。

二、内容

1.说明实验次数及实验内容 本次实验用一次实验课时完成 实验内容:

节点定义:

typedef struct node{

int idx;int age;struct node *next;}Node,*List;本次实验的对象的存储内容包括ID和AGE,所以定义了如上的结构体,idx用于存储ID号,age用于存储年龄,next用于形成链式结构,Node定义了该类型的一个节点,List定义了该类型的一个链表。(1)、编写函数CreateList()和PrintList(),从给定数组创建链表,打印链表。

int idx[8] = {1,2,3,4,5,6,7,8};int age[8] = {15,18,13,22,50,18,30,20};List CreatList(int idx[], int age[],int len){} int PrintList(List L){}(2)、编写函数DeleteNode(List L, int delete_age),完成以下操作。int DeleteNodeAge(List L, int delete_age){} 该函数传入List L,可以直接修改链表的节点,建议返回值为int 或void类型,无需为List类型,3,4题同上。2.1删除年龄为18的成员,打印链表。2.2删除年龄为20的成员,打印链表。2.3删除年龄为15的成员,打印链表。

2.4(可选)删除年龄为21的成员(因无此成员,报错),打印链表。(3)、编写函数InsertNodeByIdx(List L, Node nd),完成以下操作。(或编写函数InsertNodeByIdx(List L, Node *pnd),完成以下操作。)(建议用 Node *pnd,因Node nd作为参数传给函数InsertNodeByIdx,nd本身不能被修改,而插入链表需修改nd.next,故需创建新的节点把nd的idx和age赋值给新节点。)

3.1将(idx,age)=(6,23)插入链表,保证链表的idx仍为升序,打印链表。3.2将(idx,age)=(1,25)插入链表,保证链表的idx仍为升序,打印链表。(4)(选做)、编写函数InsertNodeByAge(List L, Node nd),完成以下操作。(或编写函数InsertNodeByAge(List L, Node *pnd),完成以下操作。)

4.1将(idx,age)=(9,31)插入链表,不用保证链表的idx仍为升序,新节点插在节点nd0后面,要求nd0.age是整个链表节点的age小于且最接近nd.age,打印链表。

(提示:本例要求插在(7,30)后面。)4.2插入节点(8,1)

(提示:本例要求插在(1,25)之前,即最前面,因age=1最小。)2.做实验完成情况

要求实验内容在实验时间内全部完成,选做实验未做。创建链表:

List CreateList(int idx[],int age[],int len){ List p,L;int i;L=NULL;for(i=len-1;i>=0;i--){

p=new Node;

p->age=age[i];

p->idx=idx[i];

p->next=L;

L=p;} return L;} 该操作创建一个不带头节点的链表并返回类型为List的结果 打印链表:

void PrintList(List L){ List p=L;printf(“idx agen”);while(p){

printf(“%d %dn”,p->idx ,p->age);

p=p->next;} } 该操作从表头到表尾依次打印idx和age 删除节点:

int DeleteNodeAge(List &L, int delete_age){ List p=L;int flag=0;if(p->age==delete_age){

L=L->next;

flag=1;} else{ while(p->next){

if(p->next->age==delete_age){

flag++;

if(p->next->next==NULL)

p->next=NULL;

else p->next=p->next->next;

}

else p=p->next;

} } return flag;} 该操作删除需要删除的节点,成功删除返回删除节点的个数,否则返回0 插入节点:

void InsertNodeByIdx(List &L, Node *pnd){ List p=L;if(p->idx>=pnd->idx){

pnd->next=L;

L=pnd;

return;} else{ while(p->next){

if(p->next->idxidx)

p=p->next;

else{

pnd->next=p->next;

p->next=pnd;

return;

}

} } } 该操作完成节点的插入,插入之后链表仍按idx成升序 主函数: int main(){ List L,pnd1,pnd2;pnd1=new Node;pnd2=new Node;int idx[8]={1,2,3,4,5,6,7,8},age[8]={15,18,13,22,50,18,30,20},r;L=CreateList(idx,age,8);PrintList(L);r=DeleteNodeAge(L,18);printf(“The result is %dn”,r);PrintList(L);r=DeleteNodeAge(L,20);printf(“The result is %dn”,r);PrintList(L);r=DeleteNodeAge(L,15);printf(“The result is %dn”,r);PrintList(L);pnd1->idx=6;pnd1->age=23;InsertNodeByIdx(L,pnd1);PrintList(L);pnd2->idx=1;pnd2->age=25;InsertNodeByIdx(L,pnd2);PrintList(L);system(“pause”);return 0;} 实验结果:

从实验代码及结果来看,首先按要求创建单链表,从打印结果来看,链表成功创建;第二步删除age为18的节点,从链表来看有两个age为18的节点,所以Delete的返回值r为2,从打印结果来看,两个节点成功删除;第三步删除age为20的节点,链表中只有一个符合要求的节点,所以返回值r为1,打印结果说明成功删除;第四步插入idx为6,age为23的节点,第四步插入idx为1,age为25的节点,从打印结果来看均成功操作。

三、总结

《实验总结报告线性表.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
实验总结报告线性表
点击下载文档
相关专题 实验报告线性表 总结报告 线性表 实验报告线性表 总结报告 线性表
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文