第二次课内实验

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

课内实验报告

学生姓名:郭长文1009290117 及学号:胡志强1009290118

张学林1009290138 学院: 理学院

班级: 信计101

课程名称:数据结构

实验题目:单链表的基本操作

指导教师

郭新辰教授

姓名及职称:

胡建平副教授

刘力实验师

2011年 10月 1 日

目录

一、实验目的 (1)

二、实验内容 (1)

三、实验要点及说明 (1)

四、实现方法 (2)

五、实验结果 (3)

六、源程序清单 (4)

一、实验目的

1. 了解单链表的结构特点及有关概念;

2. 理解单链表的存储结构;

3. 掌握单链表的基本操作算法。

二、实验内容

建立单链表,完成单链表的基本操作:初始化、插入、删除、逆转、输出、销毁, 置空表、求表长、求前驱、求后继、查找元素、判线性表是否为空。

三、实验要点及说明

对问题的描述,即对各操作进行详细说明

问题描述:编一个程序,作用是建立一个顺序表,且能完成顺序表的如下基本操作:

1.建表。建一个非空的单链表;

2.插入。根据单链表结点的位置在单链表里插入数据;

3.查找。根据顺序表结点的位置查找单链表中的数据;

4.删除。根据单链表结点的位置在单链表里删除数据;

5.查找前驱。按值查找,输出顺序表里的数据的前驱;

6.判断线性表是否为空。判断头结点是否非空即可

7.输出。将顺序表里的数据全部输出;

8.求表长。返回其数据元素个数;

9.置空表。将链表初始化。

10.逆转。将单链表里的元素逆序。

11.销毁。释放链表的储存空间。

四、实现方法

抽象数据类型的定义:

算法分析: 函数名称 功能 InitList

初始化链表 AddHead

建立链表

GetNode

查找元素 InsertList 在单链表中插入元素 DeleteList 删除单链表中元素 DestroyList

销毁单链表 PriorList 求前驱 ListLength 求表长 ListEmpty

判断表是否为空 ClearList 置空表 InversionList

逆转

PrintList

输出表

类型 变量或常量

typedef struct { DataType*data; int length;

int listsize;}SeqList;

结构体 变量

字符型常量

LIST_INIT_SIZE LISTINCREMENT

主程序的流程以及各程序模块之间的层次(调用)关系:

InsertList 主函数 ClearList DestroyList PrintList InversionList ListEmpty

PriorList

ListLength AddHead GetNode InitList DeleteList

五、实验结果

六、源程序清单

#include

#include

#include

#define flag 0

typedef struct node /*定义结构体类型的结点*/

{

int data;

struct node *next;

}LinkList;

void InitList(LinkList *&head) /*初始化单链表*/ {

head=(LinkList*)malloc(sizeof(LinkList));

if(!head)

exit(-1);

head->next=NULL;

}

LinkList *AddHead(LinkList *head) /*头插入法建表*/ {

LinkList *p;

int x;

printf(" 请输入元素(输入0结束):");

while(x!=flag)

{

p=(LinkList*)malloc(sizeof(LinkList));

scanf("%d",&x);

if(x!=0)

{

p->data=x;

p->next=head->next;head->next=p;

}

}

printf("\t\t创建完成!\n\n");

return head;

}

LinkList *GetNode(LinkList *head,int i) /*定位元素*/ {

LinkList *p=head;

int j=0;

while(p->next&&j

{

j++;

p=p->next;

}

if(j==i)

return(p);

else return NULL;

}

void InsertList(LinkList *head,int i,int x) /*插入元素*/ {

LinkList *p,*q;

p=(LinkList*)malloc(sizeof(LinkList));

p->data=x;

q=GetNode(head,i-1);

p->next=q->next;

q->next=p;

printf("\t\t插入成功!\n\n");

}

void DeleteElem(LinkList *head,int i) /*删除元素*/

{

LinkList *q,*h,*p=head;

q=GetNode(p,i-1);

相关文档
最新文档