2024年4月26日发(作者:)
线性表的顺序存储结构实验报告总结
一、目的
1.做实验的目的
加深对线性表的理解,学会定义线性表的存储结构,掌握线性表
的基本操作。
2.撰写实验报告的目的
对本次实验情况进行总结,加强对实验内容的理解,对实验过程有
一-个系统的认识,从中获得本次试验的经验,并
对实验结果进行适当的分析,加深对栈和队列的理解和认识。
二、内容
1.说明实验次数及实验内容
本次实验用一次实验课时完成
实验内容:
节点定义:
typedef struct node{
int idx: int age: struct node *next:
}Node, *List;
本次实验的对象的存储内容包括功D和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 1en) {}
int PrintList(List L) {}
(2)、编写函数DeleteNode(List L, int delete_ age),完成以下操作。
int DeleteNodeAge(List L, int
delete_ age) {}
该函数传入List L,可以直接修改链表的节点,建议返回值为int
或void类型,无需为List类型,3,题同上。
2.1删除年龄为18的成员,打印链表。
2.2删除年龄为20的成员,打印链表。
2.3删除年龄为15的成员,打印链表。
2.4 (可选)删除年龄为21的成员(因无此成员,报错) ,打印链表。.
(3)、编写函数Inser tNodeByIdx(List L, Node nd),完成以下操作。
(或编写函数Inser tNodeByIdx(List L,
Node *pnd), 完成以下操作。) (建议用 Node *pnd, 因Node nd
作为参数传给函数Inser tNodeByIdx, nd本身不
能被修改,而插入链表需修改nd. next,故需创建新的节点把nd
的idx和ag e赋值给新节点。)
3. 1将(idx, age)=(6, 23)插入链表,保证链表的idx仍为升序,打印链
表。
3. 2将(idx, age)=(1, 25)插入链表,保证链表的idx仍为升序,打印链
表。
(4) (选做) 、编写函数Inser tNodeByAge(List L, Node nd), 完成以
下操作。(或编写函数Inser tNodeByAge
(List L, Node *nd), 完成以下操作。)
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 虹,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 Inser tNodeByIdx(List 8&L, Node *pnd) {
List p=L;
if (p->idx>=pnd->idx) {
pnd- >next=L;
L=pnd:
re turn;
}
else {
while (p->next) {
if (p- ->next- >idx<=pnd- >idx) p=p->next:
else{
pnd- >next= p- next;
p->next=pnd;
re turn;
该操作完成节点的插入,插入之后链表仍按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=DeleteNodehge (L, 20) :
printf( The result is %dn^ ,r):
PrintList(L) ;
r=DeleteNodeAge (L,15) :
printf("The result is %d(n",r):
PrintList(L) :
pnd1->idx=6 :
pnd1- ->age=23:
Inser tNodeByIdx (L, pnd1) :
PrintList(L) :
pnd2- >idx=1:
pnd2- ->age=25 :
Inser tNodeByIdx (L, pnd2) ;
PrintList(L) :
system(^ pause' ):
return 0:
}


发布评论