第二次课内实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);