单链表操作实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线性表

一、实验目的

1. 了解线性表的逻辑结构特征,以及这种特性在计算机内的两种存储结构。

2. 掌握线性表的顺序存储结构的定义及其 C语言实现。

3. 掌握线性表的链式村粗结构一一单链表的定义及其C语言实现。

4. 掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5. 掌握线性表在链式存储结构一一单链表中的各种基本操作。

二、实验要求

1. 认真阅读和掌握本实验的程序。

2. 上机运行本程序。

3. 保存和打印出程序的运行结果,并结合程序进行分析。

4. 按照对顺序表和单链表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果

三、实验内容

请编写C程序,利用链式存储方式来实现线性表的创建、插入、删除和查找等操作。具体地说,就是要根据键盘输入的数据建立一个单链表,并输出该单链表;然后根据屏幕菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;然后在屏幕菜单中选择 0,即可结束程序的运行。

四、解题思路

本实验要求分别写出在带头结点的单链表中第 i (从1开始计数)个位置之后

插入元素、创建带头结点的单链表中删除第 i个位置的元素、顺序输出单链表的内容等的算法。

五、程序清单

#i nclude

#i nclude

#in clude

typedef int ElemType;

typedef struct LNode

{ ElemType data;

struct LNode *n ext;

}LNode;

LNode *L;

LNode *creat_L();

void out_L(LNode *L);

void in sert_L(LNode *L,i nt i,ElemType e); ElemType delete_L(LNode *L,i nt i); int locat_L(LNode *L,ElemType e);

void mai n()

{ int i,k,loc;

ElemType e,x;

char ch;

do{ prin

tf("\n");

prin tf("\n

1. prin

tf("\n 2.

prin tf("\n

3. prin tf("\n

4. prin tf("\n 0. 建立单链表"); 插入元素"); 删除元素"); 查找元素"); 结束程序运行"); ======================================")

请输入您的选择(1, 2, 3, 4, 0)");

请输入插入位置:"); 请输入要插入元素的值:"); prin tf("\n prin tf("\n

scan f("%d",&k);

switch(k)

{ case 1:{ L=creat_L();

out_L(L);

}break;

case 2:{ prin tf("\n

scan f("%d",&i); prin

tf("\n scan

f("%d",&e); in

sert_L(L,i,e);

out_L(L); }break;

case 3:{ prin tf("\n

scan f("%d",&i);

删除的元素为:%d\n",x);

删除%4后的单链表为:\n",x);

out_L(L);

}

else prin tf("\n }break;

case 4:{ prin tf("\n scan f("%d",&e);

loc=locat_L(L,e);

if(loc==-1) prin tf("\n

else prin tf("\n

请输入要删除元素的位置:")

x=delete_L(L,i); out_L(L); if(x!=-1) {pri ntf("\n

printf("

要删除的元素不存在!");

请输入要查找的元素值:");

为找到指定元素!");

已找到,元素位置是%d",loc);

}break;

}

printf("\n ------- ");

}while(k>=1 &&k<5);

printf("\n 按回车键,返回...\n");

ch=getchar();

}

LNode *creat_L()

{ LNode *h,*p,*s; ElemType x;

h=(LNode *)malloc(sizeof(LNode));

h-> next=NULL;

p=h;

prin tf("\n 请输入第一个数据元素:");

sca nf("%d", &x);

while(x!=-999)

{ s=(LNode *)malloc (sizeof(LNode));

s->data=x; s->n ext=NULL;

p->n ext=s; p=s;

printf(" 请输入下一个数据:(输入-999表示结束。)");

sca nf("%d", &x);

}

return(h);

}

void out_L(LNode *L)

{ LNode *p;

p=L->n ext; prin tf("\n\n");

while(p!=NULL)

{ printf("%5d",p->data); p=p->next; };

}

void in sert_L(LNode *L,i nt i,ElemType e)

{ LNode *s,*p;

int j;

p=L;

j=0;

while(p!=NULL&&j<=i-1){p=p-> next;j++;}

if(p==NULL||i<1)pri ntf("\n 插入位置错误!");

相关文档
最新文档