杭师A试卷数据结构期末试卷答案
《数据结构》期末考试试题及答案

《数据结构》期末考试试题及答案一、单项选择题1. 数据结构是计算机科学的基础学科之一。
下列哪个选项正确描述了数据结构的定义?A. 数据结构是一种计算机程序B. 数据结构是一种存储和组织数据的方法C. 数据结构是一种人工智能技术D. 数据结构是一种操作系统答案:B2. 链表和数组是常见的数据结构,它们之间的主要区别是:A. 数组可以存储不同类型的数据,而链表只能存储相同类型的数据B. 数组的元素在内存中是连续存储的,而链表的元素在内存中是分散存储的C. 链表可以随机访问元素,而数组只能顺序访问元素D. 链表的插入和删除操作更高效,而数组的访问操作更高效答案:B3. 在二叉树中,每个节点最多可以有多少个子节点?A. 1B. 2C. 3D. 无限多个答案:B二、填空题1. 假设有一组数据 [5, 8, 3, 2, 9],按照从小到大的顺序进行冒泡排序的过程中,经过三次交换后的结果是__2__,__3__,__5__,__8__,__9__。
2. 请完成以下代码,实现栈的入栈和出栈操作:```pythonclass Stack:def __init__(self):self.stack = []def push(self, item):self.stack.append(item)def pop(self):if not self.is_empty():return self.stack.pop()def is_empty(self):# 示例代码s = Stack()s.push(1)s.push(2)s.push(3)print(s.pop()) # 输出 3print(s.pop()) # 输出 2print(s.is_empty()) # 输出 False ```答案:```pythonclass Stack:def __init__(self):self.stack = []def push(self, item):self.stack.append(item)def pop(self):if not self.is_empty():def is_empty(self):return len(self.stack) == 0# 示例代码s = Stack()s.push(1)s.push(2)s.push(3)print(s.pop()) # 输出 3print(s.pop()) # 输出 2print(s.is_empty()) # 输出 False```三、简答题1. 请简要介绍树的基本概念及常见的树结构。
数据结构期末试卷以及答案

A、 1
B、 2
C、 3
D、 4
答案: D
5、以下属于逻辑结构的是
A、顺序表
B、 哈希表
C.有序表
D、 单链表
答案: C
6、已知一个顺序存储的线性表,设每个结点需占 m 个存储单元,若第一个结点的地址为
da1,则第 I 个结点的地址为
A、da1+(I-1)*m
B、da1+I*m
C、da1-I*m
D、da1+(I+1)*m
试卷答案 第 4 页 (共 7 页)
T r=k
p
q
size size size
size
int rank(tree T, node*x)
(//在二叉排序树中边查找边计算结点的中序序号
int r;
if(T->lchlid) r=T->lchild->size+l,∥计算出根结点的 r
else r=l;
If(T->rchild){ //计算所转到的右孩子的 r 值
T=T>rchild:
r=r+T->lchild->size;
}
Else //右孩子为空.则此二叉排序树中没有 r 结点
Return false;
} else
//找到 x 结点,此时的 r 即为 x 的中序序号
return r;
}//end while
试卷答案 第 2 页 (共 7 页)
} template <class Type> Type * DblStack<Type> :: DblGetTop ( int i ) { //若栈不空则函数返回该栈栈顶元素的地址。 if ( IsEmpty ( int i ) ) return NULL; //判栈 i 空否, 若栈空则函数返回空指针 return& elements[ top[i] ]; //返回栈顶元素的值 } template <class Type> void MakeEmpty ( int i ) { if ( i == 0 ) top[0] = bot[0] = -1; else top[1] = bot[1] = m; } 2、在平衡二叉排序树的每个结点中增设一个 lsize 域,其值为它的左子树中的结点数加 1。 试写一时间复杂度为 O(logn)的算法,确定树中第 k 小的结点的位置。 答案:typedef struct {
数据结构期末考试题及答案

数据结构期末考试题及答案一、单项选择题(每题2分,共20分)1. 在数据结构中,算法的时间复杂度是指()。
A. 执行算法所需要的计算工作量B. 执行算法所需要的存储空间C. 执行算法所需要的时间D. 执行算法所需要的内存大小答案:A2. 线性表的顺序存储结构和链式存储结构相比,其优点是()。
A. 插入和删除操作快B. 存储密度高C. 存储空间可以动态分配D. 存储空间利用率高答案:B3. 栈的基本运算中,不包括()。
A. 入栈B. 出栈C. 取栈顶元素D. 排序答案:D4. 在二叉树的遍历中,先序遍历的顺序是()。
A. 先根后子B. 先子后根C. 先左后右D. 先右后左答案:A5. 哈希表解决冲突的方法不包括()。
A. 分离链接法B. 线性探测法C. 链地址法D. 二分查找法答案:D6. 一个图的邻接矩阵表示法中,若第i行第j列的元素为1,则表示()。
A. 顶点i和顶点j之间有一条边B. 顶点i和顶点j之间没有边C. 顶点i和顶点j之间有n条边D. 顶点i和顶点j之间有m条边答案:A7. 在查找算法中,二分查找法适用于()。
A. 线性表B. 哈希表C. 树形结构D. 图结构答案:A8. 快速排序算法的时间复杂度在最坏情况下是()。
A. O(n)B. O(nlogn)C. O(n^2)D. O(2^n)答案:C9. 一个有n个顶点的无向图,其边数最多为()。
A. nB. n(n-1)/2C. n(n+1)/2D. 2n答案:B10. 以下哪个不是排序算法()。
A. 冒泡排序B. 选择排序C. 插入排序D. 归并排序答案:D二、填空题(每题2分,共20分)1. 在数据结构中,一个算法的空间复杂度是指算法执行过程中所需要的___________。
答案:存储空间2. 线性表的链式存储结构中,每个节点包含___________和___________。
答案:数据元素,指针3. 栈的特点是___________,___________。
数据结构期末考试试题及答案

数据结构期末考试试题及答案一、选择题1. 以下哪种数据结构是线性存储结构?A. 树B. 图C. 栈D. 队列答案:C2. 在链表中,如果一个节点既没有前驱也没有后继,那么这个节点被称作什么?A. 首节点B. 尾节点C. 中间节点D. 孤立节点答案:B3. 树的度是指什么?A. 树中节点的个数B. 树中最大的层次数C. 树的分支数D. 树的节点的度的最大值答案:C4. 在二叉搜索树中,若要查找给定值的节点,当查找失败时应返回的值是?A. -1B. 0C. 1D. 该值本身答案:A5. 快速排序算法的时间复杂度最坏情况下是多少?A. O(n)B. O(nlogn)C. O(n^2)D. O(n!)答案:C二、填空题1. 在顺序表中,元素的物理位置相邻的特点是________,这使得顺序表在________操作上具有较高的效率。
答案:连续性;访问2. 链表相比顺序表的优势在于它能够动态地________存储空间,并且________操作不需要移动大量元素。
答案:分配和释放;插入与删除3. 栈是一种________的数据结构,只允许在________进行插入和删除操作。
答案:后进先出;栈顶4. 图的遍历算法主要有两种,分别是________和________。
答案:深度优先搜索;广度优先搜索5. 哈夫曼树是一种特殊的二叉树,它常用于数据压缩,其构建过程是基于________原则。
答案:最小权值三、简答题1. 请简述数组和链表的优缺点。
答案:数组通过索引直接访问元素,访问速度快,但大小固定,插入和删除操作需要移动大量元素。
链表元素通过指针连接,可以动态分配大小,插入和删除效率高,但访问速度较慢,因为需要从头开始遍历。
2. 什么是二叉树的前序遍历、中序遍历和后序遍历?答案:二叉树的前序遍历是先访问根节点,然后遍历左子树,最后遍历右子树。
中序遍历是先遍历左子树,然后访问根节点,最后遍历右子树。
后序遍历是先遍历左子树,然后遍历右子树,最后访问根节点。
数据结构期末考试及答案

一、单选题1、逻辑上通常可以将数据结构分为( )A.初等结构和组合结构B.顺序结构和链式结构C.线性结构和非线性结构D.动态结构和静态结构正确答案:C2、如果在数据结构中每个数据元素只可能有一个直接前驱,但可以有多个直接后继,则该结构是()。
A.栈B. 队列C.图D.树正确答案:D3、在长度为n的顺序表的第i个位置上插入一个元素(1<=i<=n+1),元素的移动次数为:()A.n-iB.i-1C.n-i+1D.i正确答案:C4、在非空线性链表中由p所指结点的后面插入一个由q所指的结点,应依次执行()A.q->next=p;p->next=q;B.p->next=q;q->next=p;C.q->next=p->next;p->next=q;D.q->next=p->next;p=q;正确答案:C5、已知栈的最大容量为4。
若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为()A.2,3,5,6,1,4B.1,4,6,5,2,3C.5,4,3,2,1,6D.3,2,5,4,1,6正确答案:D6、设栈S和队列Q初始均为空,若6个元素入栈的顺序为1、2、3、4、5、6,一个元素出栈以后立即入队列Q,若6个元素出队的顺序为2、4、3、6、5、1,则栈S的容量至少为()A.3B.5C.4D.2正确答案:A7、在计算机内实现递归算法时所需的辅助数据结构是()A.队列B.栈C.图D.树正确答案:B8、循环队列存储在数组A[0..m-1],则出队时的操作为()A.front=(front mod m)+1B.ront=(front+1)mod mC.front=front+1D.front=(front+1)mod (m-1)正确答案:B9、若以S和X分别表示进栈和退栈操作,则对初始状态为空的栈可以进行的栈操作系列合法的是()A.SXXSXSSXB.SSSXXSXXC.SXSSXXXXD.SXSXXSSX正确答案:B10、在具有m个单元的循环队列中,队头指针为front,队尾指针为rear,则队满的条件是()A.(front+1)%m==rearB.(rear+1)%m==frontC.front==rearD.rear+1==front正确答案:B11、在表长为n的顺序表上做插入运算,平均要移动的结点数为()A.n/4B.nC.n/3D.n/2正确答案:D12、元素的进栈次序为A,B,C,D,E,则退栈中不可能的序列是()A.E,D,C,B,AB.A,B,C,D,EC.E,A,B,C,DD.B,C,D,E,A正确答案:C13、下述二叉树中,()满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序。
《数据结构》期末考试试卷试题及答案

《数据结构》期末考试试卷试题及答案第一部分:选择题(每题2分,共20分)1. 下面哪个数据结构是线性结构?A. 树B. 图C. 队列D. 网络流2. 下面哪个数据结构用于实现广度优先搜索算法?A. 栈B. 队列C. 散列表D. 堆3. 下面哪个数据结构用于实现深度优先搜索算法?A. 栈B. 队列C. 散列表D. 堆4. 下面哪个数据结构用于实现快速排序算法?A. 栈B. 队列C. 散列表D. 堆5. 下面哪个数据结构用于实现优先队列?A. 栈B. 队列C. 散列表D. 堆6. 下面哪个数据结构用于实现哈希表?A. 栈B. 队列C. 散列表D. 堆7. 下面哪个数据结构用于实现最小树算法?A. 栈B. 队列C. 散列表D. 堆8. 下面哪个数据结构用于实现拓扑排序算法?A. 栈B. 队列C. 散列表D. 堆9. 下面哪个数据结构用于实现最短路径算法?A. 栈B. 队列C. 散列表D. 堆10. 下面哪个数据结构用于实现并查集算法?A. 栈B. 队列C. 散列表D. 堆第二部分:填空题(每题2分,共20分)1. 链表是一种______数据结构。
2. 二叉树的节点最多有______个子节点。
3. 堆是一种特殊的______。
4. 散列表的查找效率取决于______。
5. 图的遍历算法包括______和______。
6. 快速排序算法的平均时间复杂度为______。
7. 哈希表中的冲突解决方法有______和______。
8. 最小树算法包括______和______。
9. 最短路径算法包括______和______。
10. 并查集算法用于解决______问题。
第三部分:简答题(每题10分,共50分)1. 请简述栈和队列的区别。
2. 请简述二叉搜索树的特点。
3. 请简述哈希表的原理。
4. 请简述图的深度优先搜索算法。
5. 请简述最小树算法的原理。
第四部分:编程题(每题20分,共50分)1. 编写一个函数,实现链表的插入操作。
(完整word版)数据结构试卷及答案(word文档良心出品)

注意事项:1、下面关于串的叙述中,哪一个是不正确的?( )A .串是字符的有限序列B .空串是由空格构成的串C .模式匹配是串的一种重要运算D .串既可以采用顺序存储,也可以采用链式存储 2、设无向图的顶点个数为n ,则该图最多有( )条边。
A .n-1B .n(n-1)/2C . n(n+1)/2D .0 3、以下数据结构中,( )是非线性数据结构。
A .树B .字符串C .队列D .栈 4、下面关于线性表的叙述中,错误的是哪一个?( )A .线性表采用顺序存储,必须占用一片连续的存储单元。
B .线性表采用顺序存储,便于进行插入和删除操作。
C .线性表采用链接存储,不必占用一片连续的存储单元。
D .线性表采用链接存储,便于插入和删除操作。
5、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front 和rear ,则当前队列中的元素个数为( )。
A .(rear-front+m)%mB .rear-front+1C .(front-rear+m)%mD .(rear-front)%m6、在单链表指针为p 的结点之后插入指针为s 的结点,正确的操作是( )。
A .p->next=s; s->next=p->next;B .s->next=p->next; p->next=s;C .p->next=s; p->next=s->next;D .p->next=s->next; p->next=s; 7、设栈的输入序列是1,2,3,4,则( )不可能是其出栈序列。
A .1,2,4,3B .2,1,3,4C .1,4,3,2D .4,3,1,2, 8、广义表(a,(b,c),d,e )的表头和表尾分别为( )。
A .a 和(b,c),d,e B .(a )和(b,c),d,eC .a 和 ((b,c),d,e)D .(a) 和((b,c),d,e)9、栈和队都是( )A .顺序存储的线性结构B .链式存储的非线性结构C .限制存取点的线性结构D .限制存取点的非线性结构 10、从逻辑上可以把数据结构分为( )两大类。
《数据结构》期末考试试卷(含答案)

《数据结构》期末考试试卷(含答案)《数据结构》期末考试试卷( A )一、选择题(每小题2分,共24分)1.计算机识别、存储和加工处理的对象被统称为( A )A.数据B.数据元素C.数据结构D.数据类型2.栈和队列都是(A)A.限制存取位置的线性结构B.顺序存储的线性结构C.链式存储的线性结构D.限制存取位置的非线性结构3.链栈与顺序栈相比,比较明显的优点是( D )A.插入操作更加方便B.删除操作更加方便C.不会出现下溢的情况D.不会出现上溢的情况4.采用两类不同存储结构的字符串可分别简称为( B )A.主串和子串B.顺序串和链串C.目标串和模式串D.变量串和常量串5.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是:BA. 110 B .108C. 100D. 1206.串是一种特殊的线性表,其特殊性体现在:BA.可以顺序存储 B .数据元素是一个字符C. 可以链接存储D. 数据元素可以是多个字符7.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为:CA. 2h B .2h-1C. 2h+1D. h+1软件开发网/doc/d818218954.html,8.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。
这里,我们把由树转化得到的二叉树叫做这棵树对应的二叉树。
下列结论哪个正确?AA. 树的先根遍历序列与其对应的二叉树的先序遍历序列相同B .树的后根遍历序列与其对应的二叉树的后序遍历序列相同C. 树的先根遍历序列与其对应的二叉树的中序遍历序列相同D. 以上都不对9.一个有n个顶点的无向图最多有多少边?CA. n B .n(n-1)C. n(n-1)/2D. 2n10.在一个图中,所有顶点的度数之和等于所有边数的多少倍?CA. 1/2 B .1C. 2D. 411.当在二叉排序树中插入一个新结点时,若树中不存在与待插入结点的关键字相同的结点,且新结点的关键字小于根结点的关键字,则新结点将成为(A)A.左子树的叶子结点B.左子树的分支结点C.右子树的叶子结点D.右子树的分支结点软件开发网/doc/d818218954.html,12.对于哈希函数H(key)=key%13,被称为同义词的关键字是( D )A.35和41B.23和39C.15和44D.25和51二、已知某棵二叉树的前序遍历结果为A,B,D,E,G,C,F,H,I,J,其中中序遍历的结果为D,B,G,E,A,H,F,I,J,C。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
杭州师范大学国际服务工程学院2008-2009学年第二学期期末考试《数据结构与算法分析》试卷(A )注意:请将答案填写在答题纸上。
一、选择(共30分,每小题3分,把最恰当的答案题号填到答题卷上)1. 对于具有n 个顶点的连通图(连通的无向图), 其最少的边数目为 ( ). A. n B. n ( n – 1) / 2 C. n + 1 D. n – 12. 给定某二叉树的先序遍历序列为 ABDCEFHG ,中序遍历序列为 BDAFHEGC , 则该二叉树的后序遍历序列为 ( ).A. DBAHFGCEB. BDHFGECAC. DBHFGECAD. DBCFHEGA3. 给定某整数序列为 {1,2,3,4,5,9,8,6,7}. 现要对其递增排序,则最快的排序算法为( ), 附助存储空间要求最多的排序算法为 ( ).A. 直接插入排序B. 堆排序C. 归并排序D. 起泡排序 4. 将m 个元素存储在具有s 个单元的哈希表中,则其装填因子为 ( ). A. s + m B. m / s C. m * s D. m – s 5. 图的广度优先搜索与二叉树的 ( )相类似.A. 先序遍历B. 中序遍历C. 后序遍历D.层次遍历6. 在下列三种二叉树中, 对( )中的元素进行中序遍历结果得到的序列是有顺序的。
. A. 堆(heap ) B. 二叉搜索树(binary search tree ) C.完全二叉树 7.下列各整数序列中( )不是堆.A. {100, 85, 98, 77, 80, 60, 82, 40, 20, 10, 66}B. {100, 98, 85, 82, 80, 77, 66, 60, 40, 20, 10}C. {10, 20, 40, 60, 66, 77, 80, 82, 85, 98, 100}D. {100, 85, 40, 77, 80, 60, 66, 98, 82, 10, 20}8. 如果一个栈中的进栈次序为1,2,3,4,…,n ,第一个输出的元素为n ,则第i 个输出的元素为( ).A. n – i + 1B. n – iC. iD. 无法确定 9.一个深度为k 的二叉树的最多的元素个数为( ).A. 2k + 1 – 1B. 2k - 1C. 2k -1 – 1D. 2k +1 10. 下列( )方法不是哈希表中用于处理冲突的方法. A. 线性探测 B. 链地址法 C. 折半查找 D. 二次探测二、问答题(共10分,请将答案填到答题卷上)1. 给定某英文文本为“this_is_an_ideal_string ”, 采用等长编码时的总编码长度为________位, 采用哈夫曼编码方法时的总编码长度为________位.(6 分)2. 给定某整数序列为25, 84, 21, 47, 15, 27, 68, 35, 20, 步长为3的第一轮希尔排序后得到的三、问答题(共38分,请将答案填到答题卷上)1. 对于给定的某有向图(如右图所示),要求: ① 写出每个顶点的入度和出度(2 分)② 画出其邻接矩阵表示的示意图; (3 分) ③ 画出其邻接表表示的示意图; (3 分) ④ 画出其十字链表表示的示意图; (3 分) ⑤ 画出其强连通分量; (3 分)⑥ 给出从顶点“1”出发的DFS (深度优先搜索)结果; (2 分) ⑦ 给出从顶点“2”出发的BFS (广度优先搜索)结果. (2 分)2.给定一整数序列为{40, 30, 20, 50, 60, 45, 25, 55, 35, 38}.将其依次插入到初始为空的二叉搜索树(BST:Binary Search Tree)中. 请画出每个元素插入后的BST示意图. (10 分)3. 将关键字序列11,5, 29, 20, 0, 27 ,18依次插入表长为9的初始为空的哈希表中,其哈希函数为hash(k) = k % 9,处理冲突的方法为开放定址法中的线性探测(即d i = i).请画出该哈希表, 并计算查找成功时的平均查找长度(ASL: Average Search Time).(10 分)三、完善程序(共8分,每空格2分, 将答案填写在答题卷的相应位置)请完成下列图的深度优先搜索算法,在空白处填写正确的语句。
#define MAX_VERTEX_NUM 20typedef struct ArcNode{int adjvex; //该弧所指向的顶点的位置struct ArcNode *nextarc; //指向下一条弧的指针}ArcNode;typedef struct VNode{VertexType data; //顶点信息ArcNode *firstarc; //指向第一条依附该顶点的弧的指针}VNode,AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices; //图的当前顶点数和弧数int vexnum,arcnum; //图的种类标志int kind;}ALGraph;void DFSTraverse(ALGraph G){//对图G作深度优先遍历for (v = 0;v < G.vexnum;++v)visited[v] = _____A_______; //访问标志数组初始化for (v = 0;v < G .vexnum;++v)void DFS(Graph G ,int v){ visited[v] = TRUE;printf("V%d->",G .vertices[v].data);for (w = FirstAdjVex(G ,v);w;w=NextAdjVex(G ,v,w))if (!visited[w]) _____B_______; //对v 的尚未访问的邻接顶点w 递归调用DFS }int NextAdjVex(ALGraph G ,int v,int w) {ArcNode *p;p = G.vertices[v].firstarc;while (_____C_______) p = p->nextarc; if (!(p->nextarc)) return -1; else return p->nextarc->adjvex; }int FirstAdjVex(ALGraph G ,int v) {if (!G.vertices[v].firstarc) return -1;else return _____D_______; }五、编程(14分)假设某大型网站年终时要产生年度十佳运动员,结果由网民投票产生。
假设有n 个候选运动员(n > 10),有m 个网民参加投票,每人一张选票,每张选票选一个且只选一人,每个运动员用两位十进制数的号码表示。
请编写选年度十佳运动员(得票最多者)的程序,并按运动员的得票顺序输出结果。
该程序的输入是两个文本文件,其一为保存有n 个整数的文本文件“athlete.txt ”,该文件表示n 个候选运动员;另一为保存有m 个整数的文本文件“input.txt ”,该文件表示m 张选票。
杭州师范大学国际服务工程学院2008-2009学年第二学期期末考试《数据结构与算法分析》答题卷(A )题号 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ 总分 得分一、选择(共30分,每小题3分)1. D2. C3. A C4. B5. D6. A7. D8. A9. B10. C二、填空(10 分) (1) ____ ___位; (2 分) _____79____位. (4 分)(2) 3-sort 后的整数序列为: ___25,15,20,47,35,21,68,84,27_________. (4 分)三、问答(38 分) (1) ①- 0 1 2 3 4 out-degree 13 1 2 1 In-degree2132②③ ④0010010101010000010110000 ⎡⎤⎢⎥ ⎢⎥⎢⎥ ⎢⎥ ⎢⎥⎢⎥ ⎣⎦得分得分得分班级: 学号: 姓名: 装 订 线⑤⑥ 1 0 2 4 ⑦ 2 1 0 4(2)(3).0 1 2 3 4 5 6 7 8ASL = (1 + 2 + 1 + 2 + 3 + 1 + 7) / 7 = 17 / 7 四、完善程序 (8 分)A.__FALSE _______B. __DFS(G ,w)___C. __p->adjvex != w ___D. _G .vertices[v].firstarc->adjvex _五、编程 (14 分)#include "stdio.h" #include "stdlib.h"#define MAX_NUMBER 100 typedef struct node *pointer_node; typedef struct node{ pointer_node llink; int no; int vote;pointer_node rlink; };void selectbestsportsman(int n,int m);void selectbestsportsman(int n,int m) {pointer_node head = NULL,pre,current; int i,j,votenumber;//用双向链表作为存储结构//建立双向链表的头结点,各运动员的编号从1开始pre = (pointer_node) malloc(sizeof(node));pre->llink = NULL;pre->rlink = NULL;pre->no = 0;pre->vote = MAX_NUMBER;head = pre;//分别为每个运动员建立结点for (i = 1 ; i <= n;i++){current = (pointer_node) malloc(sizeof(node));current->no = i;current->vote = 0;current->llink = pre;current->rlink = NULL;pre->rlink = current;pre = current;}pre = head->rlink;//统计各运动员的得票数,并按运动员的得票数从高到低进行调整printf("请输入%d张选票\n",m);printf("请输入各选票号码!(1<=i<=%d)\n",n);for (i = 1; i <= m;i++){printf("第%d张选票: ",i);scanf("%d",&votenumber);//判断选票是否有效while ((votenumber < 1) || (votenumber > n)){printf("该选票无效!请重新输入第%d张选票: ",i);scanf("%d",&votenumber);}//找到该运动员的结点pre = head->rlink;while ((pre) && (pre->no != votenumber)) pre = pre->rlink;pre->vote++;//按各运动员的所得票数从高到你进行调整current = pre;pre = current->llink;while ((pre != head)&&(pre->vote < current->vote)) pre = pre->llink; if (pre->rlink != current){//删除current结点current->rlink->llink = current->llink;current->llink->rlink = current->rlink;//把current结点插入到pre结点后current->rlink = pre->rlink;current->llink = pre;current->rlink->llink = current;pre->rlink = current;}}//输出每个运动员的编号与得票数pre = head->rlink;while (pre){printf("no = %d,vote number = %d\n",pre->no,pre->vote);pre = pre->rlink;}}void main(){selectbestsportsman(10,10);}。