实验总结报告线性表_实验报告线性表
实验总结报告线性表由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验报告线性表”。
实验总结报告—栈和队列
学号:
姓名: 时间:
一、目的 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的节点,从打印结果来看均成功操作。
三、总结