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:

}