C语言 - 双向循环链表、增删查改、判断回文、排序、论文+代码
更新时间:2024-04-24 07:20:01 阅读量: 综合文库 文档下载
- c语言推荐度:
- 相关推荐
数学与计算机学院 课程设计说明书
课 程 名 称: 数据结构与算法A设计实践 课 程 代 码: 6015059 题 目 一: 线性表的链式表示和实现 题 目 二: 利用栈实现表达式求解 年级/专业/班: 2011/信科/2班 学 生 姓 名: XXX 学 号: XXX
开 始 时 间: 2014 年 5 月 28 日 完 成 时 间: 2014 年 6 月 28 日 课程设计成绩:
学习态度及平技术水平与实际时成绩(30) 能力(20) 创新(5) 说明书撰写质量(45) 总 分(100) 指导教师签名: 年 月 日
目 录
摘要………………………………………………………………………………1 1 引言……………………………………………………………………………2 2 实验一…………………………………………………………………………3 2.1整体设计思路………………………………………………………………3 2.2编码…………………………………………………………………………3 2.3程序演示……………………………………………………………………6
摘 要
随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,数据结
构与算法的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。数据结构与算法旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优。
本次数据结构实践的第一个实验是线性表的链式表示和实现,要求动态地建立循环链表并实现循环链元素的插入,删除,查询;使用双向链的结构实现判断一个录入的字符串是否是回文;建立一个单向链表,实现其内元素非递减排序。
关键词:数据结构与算法 线性表 链式结构 栈 表达式求解
1
线性表及栈
1 引 言
1. 1问题的提出
数据结构课程设计是重要地实践性教学环节。在进行了程序设计语言课和 《数据结构与算法》课程教学的基础上,设计实现相关的数据结构经典问题,有助于加深对数据结构课程的认识。本课程设计是数据结构中的一个关于线性表链式表示的实现还有用栈实现表达式求解,此课程设计要求对栈存储结构和链表存储结构非常熟悉,并能熟练使用它们。
1.2 C语言
C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。
1.3 C语言发展过程
1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。
1.4任务
题目一:线性表的链式表示和实现
第一个实验主要是实现一些线性表的基本操作。包括(1)动态地建立循环链表;(2)实现循环链元素的插入,删除,查询;(3)使用双向链的结构实现判断一个录入的字符串是否是回文;(4)建立一个单向链表,实现其内元素非递减排序。
2
线性表及栈
2 实验一 线性表的链式表示和实现
2. 1整体设计思路
1、实现循环链表建立要定义链表的节点,一个节点至少应该包含数据域(data),指针域(point)两个部分,动态建立循环链表的过程实际上就是生成节点并且将节点一个个相连接的过程。
2、链元素的增删查;增加节点既在指定的序号处添加节点的操作;删除既从链表中取掉某个节点;查询既匹配某个值,返回节点位置的操作。
3、回文是从首到尾读自负与从尾到首读取字符都一样的字符串,我们将字符串的每个字符分别存入一个节点中,饭后将节点连接起来就构成了一个字符串链表。我们取第一个和最后一个节点,然后比较他们的值(data)是否相等,若相等则取第二个和倒数第二个比较……以此类推直到娶到最中间的字符为止,由此便可判断出字符串是否回文。
4、排序:由于要递增排序,我们先在被排序的链表中选出最小的值得节点,然后将节点从链表中移除,再将这个节点添加到一个新建的链表,然后以此选择最小值添加到该链表的末尾,当原链表不含任何元素时,新链表即为排好序的链表。
2.2 编码:
创建节点:
status creatNode ( node **no, elemtype elem )//创建节点 {
*no = (node *)malloc ( sizeof (node) ); (*no)->data = elem;
(*no)->fpoint = *no;//*head 表示head指针实际指向的地址 (*no)->lpoint = *no; if ( no == NULL ) exit ( overflow ); return ok; }
增加节点:
status addNode ( node **head, int i, node *beAdd )//增加节点 {
if ( *head == NULL ) {
*head = beAdd; return ok; }
node *p = *head;
int count = countNode ( p );
if ( i > countNode ( p ) || i == 0 )//当i>count时 在末尾添加,且规定当i==0时在末尾添加
{
beAdd->lpoint = p;
3
线性表及栈
beAdd->fpoint = p->fpoint;
beAdd->fpoint->lpoint = beAdd; p->fpoint = beAdd; return ok; }
else if ( i == 1 )//当i=1的时候 {
beAdd->lpoint = p;
beAdd->fpoint = p->fpoint;
beAdd->fpoint->lpoint = beAdd; p->fpoint = beAdd; p = p->fpoint; *head = p; return ok; }
else//当1
int j = 1; while ( j < i ) {
j++;
p = p->lpoint; }
beAdd->lpoint = p;
beAdd->fpoint = p->fpoint;
beAdd->fpoint->lpoint = beAdd; p->fpoint = beAdd; return ok; } }
删除节点:
status deleteNode ( node **head, int i )//删除节点 {
if ( countNode ( *head ) < 1 || countNode ( *head ) < i ) {
printf ( \链表head中不包含第 %d 个节点\\n\ return error; }
node *p = *head; int j = 1; while ( j < i ) {
j++;
p = p->lpoint; }
p->fpoint->lpoint = p->lpoint;
4
线性表及栈
p->lpoint->fpoint = p->fpoint; if ( i == 1 )
if ( *head == (*head)->lpoint ) (*head) = NULL; else
*head = (*head)->lpoint; free ( p ); return ok; }
查询节点:
int findNode ( node *head, elemtype elem )//根据值找到节点 {
int pos = 0; node *p = head; pos++;
if ( p == NULL ) return 0;
else if ( p->data == elem ) return pos;
while ( p != NULL&&p->lpoint != head ) {
p = p->lpoint; pos++;
if ( p->data == elem ) {
return pos; break; } }
return 0; }
判断回文:
bool isPalin ( node *head )//判断回文 {
bool flag = true;//标志量 true表示是回文 node *p = head;
node*p1 = p->fpoint;
int i = countNode ( head ) / 2; int j = 1;
while ( j <= i ) {
if ( p->data != p1->data ) {
flag = false; break; }
5
线性表及栈
j++; }
return flag; }
链表排序:
status sortList ( node **head )// 排序 {
int minPos;//最小节点的位置 node *h = *head;
node *newHead = NULL;//新建的链表 node *temp = NULL;
while ( countNode ( h ) != 0 )//当原链表不为空 {
removeNode ( &h, findNode ( h, findMin ( h ) ), &temp );//将找到的最小节点从原链表中移除,并放入temp节点中
addNode ( &newHead, 0, temp );//将temp节点插入新链表的末尾 temp = NULL; }
*head = newHead; return ok; }
2.3 程序演示:
程序开始:
输入2 选择增、删、查项。插入一个节点在第二个节点前,值为203:
6
线性表及栈
插入前后对比:
查询节点值 100:
7
线性表及栈
以上链表排序前后对比:
删除第3个节点:
8
正在阅读:
C语言 - 双向循环链表、增删查改、判断回文、排序、论文+代码04-24
建设项目基本情况-晋城环保局 - 图文03-17
英语中的数字表达04-13
瞬变电磁法检测技术综述10-23
2018牛津译林版初一英语下册7B Unit7单元同步检测试卷(有答案)11-03
计算机科学与技术专业认识实习调研报告04-18
Identification of impurities and statistical classification of methamphetamine05-26
施工员实习日记汇总80篇12-26
- 2009中西部家居博览会总体策划
- 2009 Revit 1级工程师学生用
- 天津地铁建设工程试验检测机构管理办法(TJDT-ZY-AQ-29)
- 新四年级数学暑期班第七次教案
- 机械制造企业隐患排查治理检查表 - 图文
- 2008届全国百套高考数学模拟试题分类汇编-103概率与统计解答题 -
- 职场健身防病试题及答案
- Excel操作技巧大全II - --数据输入和编辑技巧
- 南开大学2018春季《行政管理学》离线作业考核答案
- 2015年医师定考简易程序试卷及答案
- 新《预算法》对行政事业单位预算管理的挑战解读
- 轴的课件
- 电动汽车充电桩设计 毕业论文
- 必修2、选修2-1、1-1期末模拟试题2
- 桌面远程运维管理系统实施-可行性研究报告120306
- 西气东输水土保持工程工作总结 - 图文
- 正宁县基本县情及经济社会发展情况简介
- SATWE参数设置(巨详细)
- 儒家法思想研究综述
- 生活家政服务电子商务平台建设运营整合方案书【审报完稿】
- 回文
- 增删
- 双向
- 排序
- 循环
- 判断
- 语言
- 代码
- 论文
- 查改、
- 姐姐和嫂子
- 关于外管局37号文的详解
- 垓下之围
- 论儒家思想对当代中国法制的影响(1)
- 浅谈山区城市主干道路基试验段施工
- 二年级数学乘除法应用题100道
- 二、教你如何申请政府的资金支持
- 毕业设计基坑
- 10万吨混合饲料新建建设项目可行性研究报告 - 图文
- 阴阳五行天干地支
- MEMS CAD 结课作业
- 2017年暑假远程研修观课报告
- 温病习题
- 网络环境下的企业危机公关对策研究开题报告 - 图文
- 2018年中考学习数学必备:养成良好学习习惯-文档资料
- 河南省禽类屠宰场名录2018版166家 - 图文
- 微机原理与接口技术 - - 顾晖 - 习题参考答案
- 汉字构形学讲座(王宁)
- 人教版小学六年级下册语文期中试卷(一)
- 昆明理工大学C语言程序设计课后习题答案