《数据结构》实验报告 设计循环单链表

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

《数据结构》实验报告

1、实验名称:设计循环单链表

2、实验日期: 2013-3-26

3、基本要求:

1)循环单链表的操作,包括初始化、求数据元素个数、插入、删除、取数据元素;

2)设计一个测试主函数实际运行验证所设计循环单链表的正确性。

4、测试数据:

依次输入1,2,3,4,5,6,7,8,9,10,删除5,再依次输出数据元素。

5、算法思想或算法步骤:

主函数主要是在带头结点的循环单链表中删除第i个结点,其主要思想是在循环单链表中寻找到第i-1个结点并由指针p指示,然后让指针s指向a[i]结点,并把数据元素a[i]的值赋给x,最后把a[i]结点脱链,并动态释放a[i]结点的存储空间。

6、模块划分:

1)头文件LinList.h。头文件LinList.h中包括:结点结构体定义、初始化操作、求当前数据个数、插入一个结点操作、删除一个结点操作以及取一个数据元素操作;

2)实现文件dlb.cpp。包含主函数void main(void),其功能是测试所设计的循环单链表的正确性。

7、数据结构:

链表中的结点的结构体定义如下:

typedef struct Node

{

DataType data;

struct Node *next;

}SLNode;

8、源程序:

源程序存放在两个文件中,即头文件LinList.h和实现文件dlb.cpp。//头文件LinList.h

typedef struct Node

{

DataType data;

struct Node *next;

}SLNode;

void ListInitiate(SLNode **head) //初始化

{

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

//申请头结点,由head指示其地址

(*head)->next=*head;

}

int ListLength(SLNode *head)

{

SLNode *p=head; //p指向头指针

int size=0; //size初始值为0

while(p->next!=head) //循环计数

{

p=p->next;

size++;

}

return size;

}

int ListInsert(SLNode *head,int i,DataType x)

//在带头结点的循环单链表head的第i(0<=i<=size)个结点前插//入一个存放数据元素x的结点。插入成功返回1;失败则返回0 {

SLNode *p,*q;

int j;

p=head;

j=-1;

while(p->next!=head&&j

//最终让指针p指向第i-1个结点

{

p=p->next;

j++;

}

if(j!=i-1)

{

printf("插入位置参数错!");

return 0;

}

q=(SLNode *)malloc(sizeof(SLNode)); //生成新结点

q->data=x; //新结点数据域赋值

q->next=p->next;

p->next=q;

return 1;

}

int ListDelete(SLNode *head,int i,DataType *x)

//删除带头结点循环单链表head的第i(0<=i<=size-1)个结点被删//除结点的数据域值由x带回。删除成功则返回1;失败则返回0。{

SLNode *p,*s;

int j;

p=head;

j=-1;

while(p->next!=head&&p->next->next!=NULL&&j

//循环结束时指针p指向第i-1个结点

{

p=p->next;

j++;

}

if(j!=i-1)

{

printf("删除位置参数错!");

return 0;

}

s=p->next; //指针s指向a[i]结点

*x=s->data; //把指针s所指结点的数据域值赋予x p->next=p->next->next; //删除

free(s); //释放指针s所指结点的内存空间return 1;

}

int ListGet(SLNode *head,int i,DataType *x)

{

SLNode *p;

int j;

p=head;

j=-1;

while(p->next!=head&&j

{

p=p->next;

j++;

}

if(j!=i)

{

printf("取元素位置参数错!");

return 0;

}

*x=p->data;

return 1;

}

//实现文件dlb.cpp

#include //包含printf()函数#include //包含malloc()函数typedef int DataType; //定义DataTyoe为int #include"LinList.h" //包含LinList.h头文件void main(void)

{

SLNode *head; //定义头指针变量

相关文档
最新文档