数据结构教程上机实验指导第五版(数据结构上机实验(编程)(单链表的基本操作))

:暂无数据 2026-07-15 04:10:01 1

数据结构教程上机实验指导第五版(数据结构上机实验(编程)(单链表的基本操作))

大家好,关于数据结构教程上机实验指导第五版很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于数据结构上机实验(编程)(单链表的基本操作)的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

数据结构上机实验(编程)(单链表的基本操作)

我们正在学数据结构,两星期前写好了线性表的所有基本操作,运行全部正确。包括InitList、DestoryList、ClearList、ListEmpty、ListLength、GetElem、LocateElem、PriorElem、NextElem、ListInsert、ListDelete、ListTraverse
我所编译的环境是VC++ 6.0,有三个文件linklist.h linklist.cpp main.cpp 至于怎样用你应该知道的,我就不多说了。
========================linklist.h============================
#include 《iostream》
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
//线性表的单链表存储结构
typedef struct LNode
{
ElemType data;
int len;
struct LNode * next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int n);
int ListLength(LinkList L);
Status ListInsert(LinkList & L,int i,ElemType e);
Status ListDelete(LinkList & L,int i,ElemType & e);
ElemType GetElem(LinkList L,int i);
Status EmptyList_L(LinkList L);
int LocateElem(LinkList L,ElemType e);
Status PriorElem(LinkList L,ElemType curr_e,ElemType & e);
Status NextElem(LinkList L,ElemType curr_e,ElemType & e);
Status ListTraverse(LinkList L);
Status ClearList_L(LinkList & L);
void DestoryList_L(LinkList & L);
==========================linklist.cpp=======================
#include "linklist.h"
int LISTLEN = 0;
//逆序输入n个元素的值
//创建带有头结点的线性单链表
void CreateList_L(LinkList &L,int n)
{

L = (LinkList)malloc(sizeof(LNode));
L-》len = 0;
L-》next = NULL;

for(int i = n;i》0;--i)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
cout《《"请输入元素的值(前插):";
cin》》p-》data;
p-》next = L-》next; //插入到表头
L-》next = p;
L-》len++;
LISTLEN++;
}
}
//求表长
int ListLength(LinkList L)
{
int len1=0;
LinkList p = L-》next;
while(p)
{
p = p-》next;
len1++;
}
return len1;
//return L-》len;
}
//在链表的第i位之前插入元素e
// i 的合法位置是:1 《= i 《= ListLength(L)+1
Status ListInsert(LinkList & L,int i,ElemType e)
{
if(i《1 || i》ListLength(L)+1)
{
cout《《"插入失败! 访问越界..."《《endl;
return ERROR;
}
else
{
int j;
LinkList p = L;
for(j = 0;j《i-1;j++) //for循环结束后p将指向第i-1个元素,即应该在p后插入元素e
p = p-》next;
LinkList s = (LinkList)malloc(sizeof(LNode));
s-》data = e;
s-》next = p-》next;
p-》next = s;
L-》len++;
return TRUE;
}
}
//删除链表的第i个元素,并用e返回值
//i的合法范围是:0《i《ListLength(L)+1
Status ListDelete(LinkList & L,int i,ElemType & e)
{
if(i《1 || i》ListLength(L))
{
cout《《"访问越界..."《《endl;
return ERROR;
}
else
{
LinkList p = L;
int j;
for(j = 0;j 《 i-1;j++) //for循环后指针p将指向要删除的元素的前驱结点
p = p-》next;
e = p-》next-》data;
LinkList q = p-》next;
p-》next = q -》next;
L-》len--;
free(q);
return TRUE;
}
}
//获取表中第i个元素
//i的合法取值范围是:0 《 i 《 ListLength(L)+1
ElemType GetElem(LinkList L,int i)
{
if(i《1 || i》ListLength(L))
{
cout《《"取值非法! 链表中无此位序元素"《《endl;
return ERROR;
}
else
{
LinkList p = L;
int j;
for(j = 0;j《i;j++)
p = p-》next;
return p-》data;
}

}
//判断链表是否为空
Status EmptyList_L(LinkList L)
{
if(L-》next == NULL)
return TRUE;
return ERROR;
}
//在链表中查找定位元素e的位序,并通过函数返回
int LocateElem(LinkList L,ElemType e)
{
int i = 0;
LinkList p = L;
while(p-》next && p-》next-》data != e)
{
p = p-》next;
i++;
}
if(p-》next == NULL)
{
cout《《"在链表中找不到元素 "《《e《《endl;
return ERROR;
}
return (i+1);
}
//求当前元素curr_e的直接前驱元素,用e返回其值
Status PriorElem(LinkList L,ElemType curr_e,ElemType & e)
{
LinkList p = L;
while(p-》next && curr_e != p-》next-》data)
p = p-》next;
if(p-》next == NULL)
{
cout《《"在链表中找不到元素 "《《curr_e《《" ,无法求其前驱元素!"《《endl;
return ERROR;
}
if(p == L)
{
cout《《"元素 "《《curr_e《《" 是链表中的首元元素,无前驱..."《《endl;
return ERROR;
}
e = p-》data;
return OK;
}
/*
//求当前元素curr_e的直接后继元素,用e返回其值
Status NextElem(LinkList L,ElemType curr_e,ElemType & e)
{
LinkList p = L-》next;
//cout《《curr_e《《endl;
//cout《《p-》next-》data《《endl;
if(p == NULL)
{
cout《《"链表是个空表!"《《endl;
return ERROR;
}
if(p-》next == NULL)
{
cout《《"链表中只有一个元素,无后继..."《《endl;
return ERROR;
}
while(p-》next && curr_e != p-》data)
{
//cout《《"while"《《endl;
p = p-》next;
}
cout《《"p-》data = "《《p-》data《《endl;

if(p-》data != curr_e)
{
cout《《"111"《《endl;
cout《《"在链表中找不到元素 "《《curr_e《《" ,无法求其后继元素!"《《endl;
return ERROR;
}

if(p-》next == NULL && curr_e == p-》data)
{
cout《《"222"《《endl;
cout《《"元素 "《《curr_e《《" 是链表中的尾元元素,无后继..."《《endl;
return ERROR;
}
cout《《"333"《《endl;
e = p-》data;
return OK;
}
*/
//求当前元素curr_e的直接后继元素,用e返回其值
Status NextElem(LinkList L,ElemType curr_e,ElemType & e)
{
LinkList p = L-》next;
while(p && p-》data != curr_e)
p = p-》next;
if(p == L-》next)
{
if(p == NULL)
{
cout《《"\n链表是一个空表,无法做取后继操作!"《《endl;
return ERROR;
}
else
{
cout《《"\n链表中只有一个元素,无法求其后继..."《《endl;
return ERROR;

}
}
if(p == NULL)
{
cout《《"\n在链表中未能找到元素: "《《curr_e《《endl;
return ERROR;
}
if(p-》next == NULL)
{
cout《《"\n元素 "《《curr_e《《" 是链表的尾元元素,无法求其后继..."《《endl;
return ERROR;
}
e = p-》next-》data;
return OK;
}
//对链表进行遍历操作
Status ListTraverse(LinkList L)
{
LinkList p = L-》next;

if(LISTLEN == 0)
{
cout《《"\n链表中除头结点以外的所有内容已被释放,是一个空表!"《《endl;
cout《《"\n遍历失败..."《《endl;
return ERROR;
}
if(LISTLEN == -1)
{
cout《《"\n所有内容已被释放,链表已被销毁!"《《endl;
cout《《"\n遍历失败..."《《endl;
return ERROR;
}
while(p != NULL)
{
cout《《p-》data《《" ";
p = p-》next;
}
cout《《"\n遍历成功!"《《endl;
return OK;
}
//清空链表的内容
//单链表的清空是指释放除头结点以外的内存空间
Status ClearList_L(LinkList & L)
{
LinkList p = L;
while(p-》next)
{
LinkList m = p-》next;
free(p);
p = m;
}
L-》next = NULL;
LISTLEN = 0;
return OK;
}
//销毁链表
//单链表的释放是指释放链表的所有结点内存空间
void DestoryList_L(LinkList & L)
{
LinkList p = L;
while(p-》next)
{
LinkList m = p-》next;
free(p);
p = m;
}
//free (p);
//free (L);
LISTLEN = -1;
}
=========================main.cpp=======================
#include "linklist.h"
int main()
{
LinkList L;
ElemType e;
ElemType curr_e;
int n;
int status; //返回函数执行状态
cout《《"请输入所需创建的元素个数:";
cin》》n;
cout《《endl;
//创建单链表
CreateList_L(L,n);
cout《《endl;
//遍历
status = ListTraverse(L);
//返回链表表长
cout《《"\n单链表的长度是: "《《ListLength(L)《《endl;
//链表的插入操作
cout《《"\n请输入需要插入元素的位置: ";
cin》》n;
cout《《"\n请输入插入的元素值: ";
cin》》e;
status = ListInsert(L,n,e);
if(status)
cout《《"\n链表元素插入成功!"《《endl;
else
cout《《"\n链表元素插入失败!"《《endl;
status = ListTraverse(L);
cout《《endl;
//单链表的删除操作
cout《《"请输入需要删除的元素的位置: ";
cin》》n;
status = ListDelete(L,n,e);
if(status)
{
cout《《"\n删除成功!";
cout《《" 删除的元素是: "《《e《《endl;
}
else
cout《《"\n删除失败..."《《endl;
status = ListTraverse(L);
cout《《endl;
//获取单链表的元素
cout《《"请输入你想获取的元素在链表中的位置: ";
cin》》n;
e = GetElem(L,n);
if(n 》 0 && n 《= L-》len)
cout《《"\n单链表第"《《 n 《《"个元素值是: "《《e《《endl;
//单链表判空操作
status = EmptyList_L(L);
if(status)
cout《《"\n单链表为空表!"《《endl;
else
cout《《"\n单链表非空,其中含有元素."《《endl;
//查找定位元素
cout《《"\n请输入所需查找的元素: ";
cin》》e;
n = LocateElem(L,e);
if(n)
cout《《"\n元素 "《《e《《" 在链表中的位置是: "《《n《《endl;
//前驱操作
cout《《"\n需要求其前驱的元素值: ";
cin》》curr_e;
status = PriorElem(L,curr_e,e);
if(status)
cout《《"\n元素 "《《curr_e《《" 的前驱是: "《《e《《endl;
//后继操作
cout《《"\n需要求其后继的元素值: ";
cin》》curr_e;
status = NextElem(L,curr_e,e);
if(status)
cout《《"\n元素 "《《curr_e《《" 的后继是: "《《e《《endl;
//单链表的清空操作
cout《《"\n调用清空链表函数";
status = ClearList_L(L);
cout《《endl;

status = ListTraverse(L);
//单链表的销毁操作
cout《《"\n调用链表销毁函数";
DestoryList_L(L);

cout《《endl;
status = ListTraverse(L);
cout《《endl;
return 0;
}

计算机考研408专业基础综合 用什么教材 什么参考书

计算机考研方向主要分类计算机科学与技术、软件工程、网络空间安全3类,统考科目是408基础综合,那么统考的参考资料有哪些呢?我们整理分享“计算机考研408专业基础综合 用什么教材 什么参考书?”相关内容,一起来看看吧。
A.数据结构 
1.教材:《数据结构》严蔚敏 清华大学出版社 
2.辅导书:《算法与数据结构考研试题精析(第二版)》机械工业出版社 
B.计算机组成原理  
1.教材:《计算机组成原理》唐朔飞 高等教育出版社 
《计算机组成原理》白中英 科学出版社 
2.辅导书:《计算机组成原理考研指导》徐爱萍 清华大学出版社 
《计算机组成原理--学习指导与习题解答》唐朔飞 高等教育出版社  
C.操作系统 
1.教材:《计算机操作系统(修订版)》汤子瀛 西安电子科技大学出版社  2.辅导书:《操作系统考研辅导教程(计算机专业研究生入学考试全真 题解) 》电子科技大学出版社 
《操作系统考研指导》清华大学出版社 
D.计算机网络 
1.教材:《计算机网络(第五版)》谢希仁 电子工业出版社  
2.辅导书:《计算机网络知识要点与习题解析》哈尔滨工程大学出版社 
《全国硕士研究生入学统一考试计算机专业基础综合考试大纲解析》,高等教育出版社,2008年10月 巩微、冯东晖主编:《2009年考研计算机学科专业基础综合考试全真模拟试题集》,原子能出版社。
扩展资料
考研408是初试科目的代码,即计算机学科专业基础综合的科目代码,方便考研管理和区分。考研408计算机学科专业基础综合就是全国统考。
计算机专业特色:计算机学科的特色主要体现在:理论性强,实践性强,发展迅速。
按一级学科培养基础扎实的宽口径人才,体现在重视数学、逻辑、数据结构、算法、电子设计、计算机体系结构和系统软件等方面的理论基础和专业技术基础,前两年半注重自然科学基础课程和专业基础课程,拓宽面向。
后一年半主要是专业课程的设置,增加可选性、多样性、灵活性和方向性,突出学科方向特色,体现最新技术发展动向。至今已覆盖所有二级学科课程。加强数学基础和分析能力,高等数学改上数学分析,增加计算机数学基础课程,体现在假设组合数学,增加离散数学的课时。
并在计算机后续课程(如算法与数据结构、编译等课程)中体现数学应用不断线。更重视实践性教学环节,增加实验课程、课程设计比重,注重自主性实践环节,上机实践贯穿于四年的学习中,加强知识综合运用能力的培养。
以上是猎考考研小编整理的“计算机考研408专业基础综合 用什么教材 什么参考书?”相关文章,希望对大家有所帮助!更多艺术学咨询尽在猎考考研常识频道!
推荐文章:
2022考研:计算机考研难度排行榜
计算机专业考研院校难度系数排名

***隐藏网址***

求数据结构教程李春葆(第五版)pdf

一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。

数据结构教程第六版李春葆与第五版的区别

数据结构教程第六版和第五版在内容上有一些区别。
第六版在内容上比第五版增加了一些新的章节,如“二叉排序树”、“线段树”和“图的遍历”等。这些章节对数据结构的理解和应用都有重要意义。
第六版还对第五版的一些章节进行了修改和补充,如“查找”、“排序”和“栈与队列”等。这些修改和补充使得第六版的内容更加丰富、系统,能够更好地满足读者的需求。
另外,第六版还引入了一些新的教学方法和教学工具,如案例分析、算法动画和课堂演练等。

如果你还想了解更多这方面的信息,记得收藏关注本站。

数据结构教程上机实验指导第五版(数据结构上机实验(编程)(单链表的基本操作))

本文编辑:admin

更多文章:


影视剧中有哪些剧情颠覆了你的三观?金庸的武侠小说《白马啸西风》为什么没有被拍成电影或者电视剧

影视剧中有哪些剧情颠覆了你的三观?金庸的武侠小说《白马啸西风》为什么没有被拍成电影或者电视剧

各位老铁们,大家好,今天由我来为大家分享白马影视,以及影视剧中有哪些剧情颠覆了你的三观的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年9月7日 00:30

mysql varchar和char的区别(mysql中char、varchar、nvarchar区别)

mysql varchar和char的区别(mysql中char、varchar、nvarchar区别)

各位老铁们,大家好,今天由我来为大家分享mysql varchar和char的区别,以及mysql中char、varchar、nvarchar区别的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大

2026年9月7日 00:10

linux命令的选项和参数(linux为什么要有参数和选项)

linux命令的选项和参数(linux为什么要有参数和选项)

各位老铁们好,相信很多人对linux命令的选项和参数都不是特别的了解,因此呢,今天就来为大家分享下关于linux命令的选项和参数以及linux为什么要有参数和选项的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月6日 20:20

arm汇编指令流程图(arm 汇编指令)

arm汇编指令流程图(arm 汇编指令)

大家好,如果您还对arm汇编指令流程图不太了解,没有关系,今天就由本站为大家分享arm汇编指令流程图的知识,包括arm 汇编指令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月6日 18:40

perseverance的意思(preseverance的意思)

perseverance的意思(preseverance的意思)

大家好,如果您还对perseverance的意思不太了解,没有关系,今天就由本站为大家分享perseverance的意思的知识,包括preseverance的意思的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月6日 18:30

react native和uniapp(h5和uniapp和react性能)

react native和uniapp(h5和uniapp和react性能)

大家好,如果您还对react native和uniapp不太了解,没有关系,今天就由本站为大家分享react native和uniapp的知识,包括h5和uniapp和react性能的问题都会给大家分析到,还望可以解决大家的问题,下面我们就

2026年9月6日 18:00

mysql查看有哪些表(在mysql里面怎么查看数据库里面有多少表)

mysql查看有哪些表(在mysql里面怎么查看数据库里面有多少表)

大家好,mysql查看有哪些表相信很多的网友都不是很明白,包括在mysql里面怎么查看数据库里面有多少表也是一样,不过没有关系,接下来就来为大家分享关于mysql查看有哪些表和在mysql里面怎么查看数据库里面有多少表的一些知识点,大家可以

2026年9月6日 17:40

parsefloat()(html里的parsefloat什嘛意思)

parsefloat()(html里的parsefloat什嘛意思)

大家好,如果您还对parsefloat()不太了解,没有关系,今天就由本站为大家分享parsefloat()的知识,包括html里的parsefloat什嘛意思的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月6日 16:30

onreceive函数(Android怎么给onReceive()函数传参数)

onreceive函数(Android怎么给onReceive()函数传参数)

大家好,关于onreceive函数很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于Android怎么给onReceive()函数传参数的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦

2026年9月6日 15:00

school day是什么意思(school days为什么要翻译成日在校园啊)

school day是什么意思(school days为什么要翻译成日在校园啊)

今天给各位分享school days为什么要翻译成日在校园啊的知识,其中也会对school days为什么要翻译成日在校园啊进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月6日 14:10

最近更新

mysql varchar和char的区别(mysql中char、varchar、nvarchar区别)
2026-09-07 00:10:07 浏览:0
热门文章

yoga pro 14s carbon(yoga14s接口类型)
2026-07-03 17:50:01 浏览:5
domino directory(帮我翻译一下Recipient’s Domino Directory entry does not specify a valid Notes mail file)
2026-08-03 19:20:01 浏览:4
标签列表