
Data Structure
baiduoWang
这个作者很懒,什么都没留下…
展开
-
表达式求值
背景:在严蔚敏版《数据结构》教材中已经介绍了表达式求值的算法,现在我们将该算法的功能进行扩展,要求可以处理的运算符包括:+、-、*、/、%(整数取余)、^(乘方)、(、)。要求:采用算符优先算法,计算的中间结果只保留整数。输入:第一行为整数N。表示下面有N个表达式从第二行起的后面N行为N个由整数构成的表达式 输出:共N行,每行为相应表达式的计算结果。如果判断原创 2017-04-10 14:44:11 · 1845 阅读 · 0 评论 -
数组元素循环左移
设将n(n>1)个整数存放到一维数组R中,设计一个算法,将R中的序列循环左移P(0分析:要实现R中序列循环左移P个位置,只需先将R中前P个元素逆置,再将剩下的元素逆置,最后将R中所有元素再整体做一次逆置操作即可。算法描述如下所示:#include#define N 50using namespace std;void Reverse(int R[],int l,int r)原创 2017-07-03 21:26:46 · 1858 阅读 · 0 评论 -
顺序表
1、顺序表的结构体定义typedef struct{ int data[maxSize]; //存放顺序表元素的数组 int length; //存放顺序表的长度}Sqlist; //顺序表类型的定义2、顺序表的操作(1)按元素值的查找算法在顺序表中查找第一个值为e的元素int findElem(Sqlist L,int e){ int i; for (i=0;原创 2017-07-13 23:19:34 · 446 阅读 · 0 评论 -
在数组中限制次数的取最大值和最小值问题
设计一个算法:用不多于3n/2的平均比较次数,在数组A[1,…,n]中找出最大值和最小值的元素。算法思想:如果在查找出最大值和最小值的元素时各遍历一遍所有元素,则至少要比较2n次,所以使用一遍遍历找出最大值和最小值的元素。实现此思想的函数如下:void maxmin(int A[],int n){ int i; int max,min; max = A[1]; min原创 2017-08-28 20:57:57 · 1356 阅读 · 0 评论 -
合并两个顺序表,并删除重复元素
设A和B是两个顺序表,其元素按非递减的顺序排列。编写一个将A和B中所有元素组成一个新的从小到大的有序顺序表C的算法,要求删除重复的元素,并返回C表的长度。解析:这是一个常规题,参考代码如下:int unions(int A[], int na, int B[], int nb, int C[]){ int i = 0, j = 0, k = 0; while (i<na && j<原创 2017-08-31 16:35:16 · 6257 阅读 · 0 评论 -
线性表的应用1
设某机器表示的整数不超过5位十进制数字。试设计一种表示任意长的整数的数据结构,并利用设计的数据结构,写出计算任意给定的两个整数之和的算法。solution:将用户输入的正整数按各位数字存放在一个顺序表中,这样就变成了两个顺序表中的数字相加。实现该功能的程序代码如下:int input(int A[]){ int i; for (i=0; i<MaxLen; ++i) A[i]原创 2017-09-01 23:06:26 · 465 阅读 · 0 评论 -
线性表的应用2
假设有n(n>1)个线性表顺序地存放在顺序表S[1,…,m]中,令F[i]和R[i]指示第i个(1试写出实现下列要求的算法。(1)在第i个表中的第j项后面插入1个元素,仅当整个顺序表空间填满时,不允许进行插入操作。(2)删除第i个表中的第j个元素,要求在删除第j个元素后,该表仍为顺序存储的线性表。solution:本题实质是将n个线性表(长度可能不相同)放于一个连续空间(长度为m),为原创 2017-09-02 00:31:09 · 411 阅读 · 0 评论 -
LinearList
1、线性表的定义 线性表是具有相同特性数据元素的一个有限序列。该序列中所含元素的个数叫做线性表的长度,用n(n>0)表示。n可以为0,表示该线性表是一个空表。2、线性表的逻辑特性 只有一个表头元素,只有一个表尾元素,表头元素没有前驱,表尾元素没有后继,除表头和表位元素之外,其他元素只有一个直接前驱,也只有一个直接后继。3、结构体定义#define maxSize 1原创 2017-10-30 06:53:59 · 1293 阅读 · 0 评论 -
Stack and Queue
1、栈的定义 栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入或删除的一端称为栈顶(TOP),表的另一端称为栈底,栈底是固定不变的。2、栈的特点 先进后出(FILO)3、栈的存储结构 顺序栈和链式栈;栈本质上是线性表4、栈的数学性质 当n个元素以某种顺序进栈,并且可在任意时刻出栈(在满足先进后出的前提下)时,所获得的元素排列的数目N原创 2017-10-31 16:41:20 · 876 阅读 · 0 评论 -
线性表的顺式存储简单应用
1、已知长度为n的线性表a采用顺序存储结构,编写算法将a中所有的非零元素依次移到线性表a的前端。int n; //线性表的长度typedef struct{ int data[n+1]; //存放顺序元素的数组 int length; //存放顺序表的长度}Sqlist; //顺序表类型的定义void change(Sqlist A,int n){原创 2017-12-12 00:32:05 · 747 阅读 · 0 评论 -
复制广义表
根据广义表的信息和结构,将一个广义表复制到另外的一个广义表中typedef enum{ ATOM,LIST;}ElemTag; //ATOM==0:原子,LIST==1:字表typedef struct GLNODE{ ElemTag tag; //公共部分,用于区分原子节点和表结点 union{ AtomType atom; //at原创 2017-12-25 09:08:13 · 1084 阅读 · 0 评论 -
快速排序
要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。 注:1,cutoff值为5,不足cutoff使用插入排序。 2,输入、输出格式参见测试用例0。测试输入411734019#测试输入After Sorting:0 17 19 34 41 Median3 Value:n原创 2017-05-07 21:20:02 · 1758 阅读 · 0 评论 -
堆排序
实验要求:用堆排序算法按关键字递减的顺序排序。程序输入:待排序记录数(整数)和待排序记录(整数序列);程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)测试输入6111216141510测试输出16 15 11 14 12 10 15 14 11 10 12 14 12 11 10原创 2017-05-07 21:18:01 · 719 阅读 · 0 评论 -
双向约瑟夫问题
约瑟夫问题是一个经典的问题,我们不妨将这个经典问题进行扩展,变成一个双向的约瑟夫问题。 已知 n 个人(不妨分别以编号 1,2,3,...,n 代表 )围坐在一张圆桌周围,首先从编号为 k 的人从 1 开始顺时针报数,1, 2, 3, ...,记下顺时针数到 m 的那个人,同时从编号为 k 的人开始逆时针报数,1, 2, 3, ...,数到 m 后,两个人同时出列。然后从出列的下一个人又从原创 2017-04-02 22:13:44 · 1275 阅读 · 0 评论 -
综教楼后的那个坑
描述 在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。 从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:每个平面 i 可以用两个数字来描述,即它原创 2017-04-10 14:51:02 · 2244 阅读 · 2 评论 -
一元多项式的相加
题目说明:编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能:1.多项式求和输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc(提示:调用CreatePolyn(polynomial &P,int m)。输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc(提示:调原创 2017-04-02 22:05:54 · 1261 阅读 · 2 评论 -
求循环小数
对于任意的真分数 N/M ( 0 输入: N M 输出: 转换后的小数(不超过 50 ) 要求: 仅编写将分数转换为小数的函数 change( int n, int m, NODE * head ) 。测试输入1 8测试输出0.125源代码‘#include #include typedef struct node原创 2017-04-07 09:34:38 · 1967 阅读 · 0 评论 -
广义表的建立与基本操作
采用"头尾法存储广义表,实现以下广义表的操作: 1.Status CreateGList( GList &L, char *S ) // 根据字符串 S 表示的广义表内容建立广义表数据结构; 2.GList GetHead( GList L) // 取表头运算 3.GList GetTail( GList L) // 取表尾运算 4.void Destr原创 2017-05-07 20:58:42 · 1219 阅读 · 0 评论 -
股票撮合系统
在股票交易中,股民可以通过各种手段将委托送到股票交易所。每个委托主要说明了股民身份、买卖的股票、价格和数量。交易的规则是价格优先、时间优先,即出的价格最高的人先买,出的价格最低的人先卖。两个委托只有价格合适时才能成交,未成交的委托按价格顺序放在撮合队列中。每个股票有两个撮合队列:买队列和卖队列。只有当买委托的价格高于等于卖委托的价格,两个委托才可以成交,成交价取两个委托价格的平均值,成交量取两个委原创 2017-05-07 21:01:47 · 1965 阅读 · 1 评论 -
二叉树遍历序列还原
给出二叉树的中序遍历序列和后序遍历序列,编程还原该二叉树。输入: 第1行为二叉树的中序遍历序列 第2行为二叉树的后序遍历序列输出: 二叉树的按层遍历序列测试输入badcfegbdfgeca测试输出abcdefg源代码#include #include #include #include typ原创 2017-05-07 21:06:07 · 1241 阅读 · 0 评论 -
树的建立与基本操作
在本实验中,程序的输入是一个表示树结构的广义表。假设树的根为 root ,其子树森林 F = ( T1 , T2 , … , Tn ),设与该树对应的广义表为 L ,则 L =(原子,子表 1 ,子表 2 , … ,子表 n ),其中原子对应 root ,子表 i ( 1程序的输出为树的层次结构、树的度以及各种度的结点个数。在输出树的层次结构时,先输出根结点,然原创 2017-05-07 21:09:00 · 605 阅读 · 0 评论 -
图的广度优先遍历
本实验实现邻接表表示下无向图的广度优先遍历。程序的输入是图的顶点序列和边序列(顶点序列以*为结束标志,边序列以-1,-1为结束标志)。程序的输出为图的邻接表和广度优先遍历序列。例如:程序输入为:a b c d e f *0,1 0,4 1,4 1,5 2,3 2,5 3,5-1,-1程序的输出为: th原创 2017-05-07 21:12:53 · 1187 阅读 · 0 评论 -
平衡二叉树
程序输入一个字符串(只包含小写字母),请按照字符的输入顺序建立平衡二叉排序树,并分别输出二叉树的先序序列、中序序列和后序序列,最后输出该二叉树向左旋转 90 度后的结构。例如:向左旋转 90 度后,以每层向里缩进 4 个空格的方式输出,输出结果为: i g fa d c b输入:ag原创 2017-05-07 21:16:01 · 1206 阅读 · 0 评论 -
二叉树中叶子节点的统计和树高问题
1、已知二叉树以二叉链表进行存储,其中结点的数据域为data,编写算法,统计二叉树中叶子结点值等于x的结点数目。typedef struct BTNode { int data; struct BTNode *lchild ; //左孩子指针 struct BTNode *rchild; // 右孩子指针 } BTNode;//二叉链表的结构int nu原创 2017-12-17 23:35:58 · 1843 阅读 · 0 评论