2周《数据结构》课程设计任务书

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

沈阳工程学院

课程设计任务书

课程设计题目:数据结构与算法课程设计

系别信息工程系班级

学生姓名学号

指导教师职称

课程设计进行地点:

任务下达时间:年月日

起止日期:年月日起——至年月日止教研室主任年月日批准

一、课程设计的原始资料及依据

数据结构与算法课程设计是在完成数据结构理论课程学习之后进行的一个综合性的实践教学环节,是对课程理论和课程实验的一个补充。通过课程设计,培养学生综合运用已学过的理论和技能去分析和解决实际问题的能力,并使所学知识得到进一步巩固、深化和扩展。

二、课程设计主要内容及要求

设计内容:

1、设有一元素为整数的线性表L=(a1,a2,a3,…,an),存放在一维数组A[N]中,设计

一个算法,以表中an作为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于an,右半部分每个元素都大于an, an位于分界位置上(要求结果仍存放在A[N]中)。

2、设线性表存于A[1..size]的前num各分量中,且递增有序。请设计一个算法,

将x插入到线性表的适当位置上,以保持线性表的有序性。

3、线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储于计算机内。要求设计

一算法完成:

4、用最少时间在表中查找数值为x的元素。

5、若找到将其与后继元素位置相交换。

6、若找不到将其插入表中并使表中元素仍递增有序。

7、已知数组A[0:n-1]的元素类型为int,试设计算法将其调整为左右两个部分,

左边所有元素为奇数,右边所有元素为偶数。

8、设计一个算法从顺序表L中删除所有值为x的元素

9、设计一个算法从顺序表L中删除所有值为x到y之间(x<=y)的元素

10、假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请

编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

11、已知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表

中数据结点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。

12、设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,

设计一个将该链表整理成数据递增的有序单链表的算法。

13、设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、

C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A的元素类型为整型,要求B、C表利用A表的结点)。

14、试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。

15、设L为单链表的头结点地址,请写一算法,将链表中数据域值最小的那

个链结点移到链表的最前面。要求:不得额外申请新的链结点。

16、已知两个单链表A和B,其头指针分别为heada和headb,编写一个过程

从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个元素之前。

17、已知递增有序的单链表A,B分别存储了一个集合,请设计算法以求出两

个集合A和B 的差集A-B(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。

18、已知一个单链表中每个结点存放一个整数,并且结点数不少于2,请设

计算法以判断该链表中第二项起的每个元素值是否等于其序号的平方减去其前驱的值,若满足则返回ture,否则返回false.

19、两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单

链表中,设计一个算法,判断序列B是否是序列A的子序列。

20、已知p指向双向循环链表中的一个结点,其结点结构为data、llink、

rlink三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。

21、设有一个由正整数组成的无序单链表,编写完成下列功能的算法:

(1)找出最小值结点,且打印该数值;

(2)若该数值是奇数,则将其与直接后继结点的数值交换;

(3)若该数值是偶数,则将其直接后继结点删除。

22、在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单

链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。例如:(7,10,10,21,30,42,42,42,51,70)将变作(7,10,21,30,42,51,70)。

23、编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该

链表的头指针,P指向该链表中某一结点。

24、已知三个带头结点的线性链表A、B和C中的结点均依元素值自小至大非

递减排列(可能存在两个以上值相同的结点),编写算法对A表进行如下操作:使操作后的链表A中仅留下三个表中均包含的数据元素的结点,且没有值相同的结点,并释放所有无用结点。限定算法的时间复杂度为O(m+n+p),其中m、n和p分别为三个表的长度。

25、设计一个算法,利用栈的基本运算将指定栈中的内容逆转。

26、设计一个算法,利用栈的基本运算返回指定栈中栈底元素。

27、设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区

[O..maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S1,S2有关入栈和出栈的操作算法。

28、设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用

栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。

29、设表达式以字符形式已存入数组E[n]中,‘#’为表达式的结束符,试写

出判断表达式中括号(‘(’和‘)’)是否配对的C语言描述算法:EXYX(E);

(注:算法中可调用栈操作的基本算法。)

30、从键盘上输入一个逆波兰表达式,用伪码写出其求值程序。规定:逆波

兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$

31、写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否

则返回false(假定被判定的操作序列已存入一维数组中)。

32、设计一个算法,判断一个算术表达式中的括号是否配对。算术表达式保

存在带头结点的单循环链表中,每个结点有两个域:ch和link,其中ch域为字符类型。

33、请利用两个栈S1和S2来模拟一个队列。已知栈的三个运算定义如下:

PUSH(ST,x):元素x入ST栈;POP(ST,x):ST栈顶元素出栈,赋给变量x;

相关文档
最新文档