数据结构课程设计-- 循环单链表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计-- 循环单链表
信息科学与技术学院《数据结构》课程设计报告
题目名称:循环单链表(附加头结点,引用)专业班级:计算机科学与技术2011级1班学生姓名:**
学生学号:**********
指导教师:**
目录
1 课程设计的目的 (1)
1.1 课程设计的目的 (1)
1.2 课程设计的题目 (1)
1.3 题目要求 (1)
2 概要设计 (1)
2.1 存储结构 (1)
2.2 基本操作 (1)
3 详细设计 (2)
3.1 流程图 (2)
3.2 源程序 (7)
4 测试 (12)
5 课程设计总结 (19)
6参考书目: (20)
1 课程设计的目的
1.1 课程设计的目的
更好的掌握数据结构这门课程,会用数据结构的基本思想及算法解决实际问题。更好的掌握循环链表,能进行各种基本的操作,提高编程能力。
1.2 课程设计的题目
循环单链表(附加头结点,引用)
1.3 题目要求
实现附加头结点循环单链表的基本操作:创建空表、输出、求表长、取元素、查找、替换、插入、删除、清空。
2 概要设计
2.1 存储结构
存储结构
L data next data next data next dat
next
typedef struct node{
datatype data;/*数据域*/
struct node *next;/*指针域*/
}LNode,*LinkList;/*结点及结点的地址*/
2.2 基本操作
创建空表、输出、求表长、取元素、查找、替换、插入、删除、清空。
3 详细设计
3.1 流程图
各个算法的设计如下:
1.主函数:
2.主菜单
用于进行指示进行各种操作,是与每个函数都相联系的一个函数
3.显示链表
先让指针指向首元结点,在判断该指针是否为头指针,不是则输入数据,实则退出
4.求表长
先求表的初始长,在判断链表是否为空,不是则len自加,否则结束
先求表长,在判断Index < 1 || Index > len,为否则循环,一直活得该数据
6.查找
求表长,在判断链表是否为空,是则结束,否则判断要查找的数据是否在链表中,是则成功
判断要替换的位置是否在链表范围中,是则循环找到要替换的数据替换,否则结束
判断将要插入的位置是否在链表范围内,是则循环将要插入的数据插入,否则结束
9.删除
判断链表是否为空,否则删除该结点,是则结束
10.清空
判断聊表是够为空,否则依次释放空间,否则结束
3.2 源程序
#include
using namespace std;
typedef int ElemType;
typedef struct node{
ElemType data;
struct node *next;
}LNode,*LinkList,*pNODE;
// 创建一个有头结点的空循环表。
LinkList InitList(void)
{
pNODE head = new LNode;
head->next = head;
return head;
}
// 头插法。将给定结点插在链表头部。
void InsertHead(LinkList head,pNODE anode) {
anode->next = head->next;
head->next = anode;
}
// 返回链表长度。
int ListLen(LinkList head)
{
int len = 0;
pNODE p = head;
while(p->next != head)
{
++len;
p = p->next;
}
return len;
}
// 查找。成功返回1,否则返回0。
int ListSearch(LinkList head, ElemType data)
{
pNODE p = head;
while(p->next != head)
{
if(p->next->data == data)
return true;
p = p->next;
}
return 0;
}
// 获取指定索引号的数据。
void GetData(LinkList head,int Index,ElemType data)
{
pNODE p = head;
int i,len = ListLen(head);
if(Index < 1 || Index > len)
cout <<"获取失败" < for(i = 0; i data = p->data; cout <<"获取成功,其值为:"< // 用给定结点替换指定索引的结点。 void NodeReplace(LinkList head, int Index, int data) { pNODE p = head; int i,len = ListLen(head); if(Index < 1 || Index > len) cout <<"错误" < for(i = 0; i p->data=data;