中国石油大学数据结构上机实验2 下载本文

内容发布更新时间 : 2024/12/23 20:27:44星期一 下面是文章的全部内容请认真阅读。

《数据结构》实验报告

学号 2015011512 姓名 胡明禹 专业 数学与应用数学 时间 2018.3.20

一、 实验题目

实验2 单链表基本操作

二、 实验目的

1. 熟练掌握线性表的顺序存储方式下,基本操作的实现算法,巩固和

体会单链表操作特点;

2. 理解体会动态内存申请与释放;

3. 通过本次实验,熟练掌握C语言指针的使用

三、算法设计分析

(一)实验内容

1.创建一个空的带头结点的单链表 2.采用头插法在单链表中插入n个元素 3.删除单链表中第i个元素 4.实现单链表按关键字查找操作 5.计算单链表的表长并输出单链表 6.销毁单链表 (二)总体设计

此处给出主要函数功能、及函数间调用关系的的描述。例如: 1. 构造一个空的单链表的函数;2. 插入函数;3. 删除函数 4. 查找函数;5.计算并输出函数;6.销毁函数。 其功能描述如下:

(1)主函数:统筹调用各个函数以实现相应功能 void main() (2)

①构造一个空的单链表的函数 Status InitList_L(LinkList &L)

{

L=(LinkList)malloc(sizeof(LNode));//构造一个空的线性表L f(!L) exit (OVERFLOW);//存储分配失败

L->next=NULL;//空表长度为0system(\清空屏幕 printf(\初始化成功\\n\\n\\n\system(\按任意键继续 return OK; }

void CreateList_L(LinkList &L) {//创建一个新表 int i,count; LinkList p;

system(\清屏 printf(\输入总结点数:\scanf(\

printf(\输入各个结点数值,每输一个按下回车:\\n\for(i = count; i > 0; i--) {

p = (LinkList)malloc(sizeof(LNode)); scanf(\p->next = L->next; L->next = p;//赋值 }

system(\清屏 printf(\录入成功\\n\}

②插入函数

Status ListInsert_L(LinkList &L, int i, int newnode) {//在顺序线性表L中第i个位置之前插入新的元素 LinkList p = L;

LinkList s; int j = 0; while(p&&j

p = p->next; ++j; }

if(!p||j>i-1)//i插入的位置不合法 {

printf(\}

s = (LinkList)malloc(sizeof(LNode)); s->data = newnode;

s->next = p->next;//将p的后继结点给s的后继结点 p->next = s;//将s给p的后继结点 return OK; }

③删除函数

Status ListDelete_L(LinkList &L, int i)

{//在顺序线性表L中删除第i个元素,并用e返回其值 LinkList p=L; LinkList q; int j=0;

while(p->next&&j

p = p->next; ++j; }

if(!(p->next)||j>i-1) return ERROR;//删除位置非法 q= p->next;//将p的后继结点给q