数据结构与算法分析——c语言描述答案
文章平均质量分 64
qq789045
这个作者很懒,什么都没留下…
展开
-
大小为N的数组A,其主要元素是一个出现次数超过N/2的元素。找出主要元素。
数据结构与算法分析——c语言描述 练习2.19 答案这道题网上找的答案然后自己写一遍。参考了阿飞旭日东升的代码这道题的算法为什么数组B的候选元也是A的候选元呢?我不知道怎么数学证明。以下只是个人吹水,如果a中找到一个候选元,b中一个元素代表a中的2个元素,就算是最坏的情况下排列为xyxyxyxyxy ,要提取候选元,最后肯定是要加上两个xx。主要元素的候选元肯定是最多的。转载 2016-03-11 22:12:39 · 3863 阅读 · 3 评论 -
编写一个程序解决选择问题
数据结构与算法分析——c语言描述 练习1.1方法是书上的,先读入k个数,然后后面的假如大于k就把最后一个数挤出去,用了二分查找。#include#define MAXN 1000int arri[MAXN];void intsert( int x, int N) { int low, mid, high; low = 0; high = N - 1; whil原创 2016-03-08 17:33:55 · 3188 阅读 · 1 评论 -
队列的数组实现
数据结构与算法分析——c语言描述 第三章 队列的数组实现注意rear和front初始化的赋值。queue.htypedef int ElementType;#ifndef _Queue_h#define _Queue_hstruct QueueRecord;typedef struct QueueRecord *Queue;int isEmpty(Queue转载 2016-03-18 00:50:50 · 517 阅读 · 0 评论 -
编写打印出一个单链表的所有元素的程序
数据结构与算法分析——c语言描述 练习3.1 答案main.c#include"list.h"#include#define N 1208void printAll(List l) { Position p = Advance(l); while (p) { printf("%d ", Retrieve(p)); p=Advance(p); }}int原创 2016-03-18 13:35:26 · 7492 阅读 · 1 评论 -
一个链表L 一个链表P 包含升序排列的整数 操作PrintLots(L,P)将打印L中那些由P所指定的位置上的元素
数据结构与算法分析——c语言描述 练习3.2 答案void PrintLots(List l, List p) { int i = 1; Position l_pos, p_pos; l_pos = Advance(l); p_pos = Advance(p); while (p_pos != NULL && l_pos != NULL) { int num = Retr原创 2016-03-18 19:33:27 · 4516 阅读 · 0 评论 -
通过只调整指针(而不是数据)来交换两个相邻的元素
数据结构与算法分析——c语言描述 练习3.3 答案单链表,这个函数得在头文件和实现文件里面放,因为要修改next指针,所以放在main.c是不行的,除非使用extern 声明一下node节点,那么这样就达不到封装的目的了反而麻烦。void SwapWithNext(Position BeforeP, List L) { Position p1 = Advance(BeforeP)原创 2016-03-18 20:18:13 · 4799 阅读 · 1 评论 -
多项式链表
数据结构与算法分析——c语言描述 第三章的多项式链表用c来写类好酸爽。。。。有几个地方还没完成,一个是初始化,而是输入输出,三是书中要求以次数递减的顺序排序。这里完全是来个二次循环排序,应该有更好的办法,而且排序嫌麻烦直接交换内容而不是用了链表的交换。以后会更新代码的。list.htypedef struct { int Coefficient; int Expone原创 2016-03-12 21:23:49 · 1019 阅读 · 0 评论 -
编写一个程序求解字谜游戏
数据结构与算法分析——c语言描述 练习1.2原创 2016-03-08 18:30:16 · 6625 阅读 · 1 评论 -
单链表实现
数据结构与算法分析——c语言描述 第三章的单链表很基础的东西。走一遍流程。有人说学编程最简单最笨的方法就是把书上的代码敲一遍。这个我是头文件是照抄的。.c源文件自己实现。list.htypedef int ElementType;#ifndef _List_H#define _List_Hstruct Node;typedef struct Node *Ptr转载 2016-03-12 15:16:52 · 869 阅读 · 2 评论 -
给定两个已排序的表L1和L2 只使用基本的表操作编写计算L1∩L2的过程 交集
数据结构与算法分析——c语言描述 练习3.4 答案#include"list.h"#includeList Intersect(List l1, List l2) { List intersect = CreatList(); Position p1 = First(l1); Position p2 = First(l2); Position resultPos = in原创 2016-03-19 16:38:18 · 5047 阅读 · 2 评论 -
给定两个已排序的表L1和L2 只使用基本的表操作编写计算L1∪L2的过程 并集
数据结构与算法分析——c语言描述 练习3.5 答案#include"list.h"#includeList Intersect(List l1, List l2) { List intersect = CreatList(); Position p1 = First(l1); Position p2 = First(l2); Position resultPos = inters原创 2016-03-19 16:53:57 · 3243 阅读 · 0 评论 -
输入一个多项式F(X) 计算出(F(X))^P
数据结构与算法分析——c语言描述 练习3.8 答案#include#include#include"Polynomial.h"#define MAXN 1000Polynomial PowersOfXO[MAXN];int main() { int p, cnt, i; Polynomial ans = creatPolynomial(); Polynomial fx =原创 2016-03-19 20:43:41 · 1722 阅读 · 0 评论 -
用一个数组实现三个栈
数据结构与算法分析——c语言描述 练习3.23 答案这道题还是挺有意思的。第三个栈从中间开始,假如有冲突的时候还剩空位时候移动第三个栈到栈1和栈2顶端的中心。要注意的是如何判断整个是否满了,以及每个栈是否能再继续进栈。第三个栈有些特殊。编程很多时候并不能一步到位,需要不断debug,然后不停更改。当然一开始的思路方向是很重要的。stack.htypedef in原创 2016-03-31 17:30:23 · 1831 阅读 · 0 评论 -
提出支持栈的Push和Pop操作以及第三种操作FindMin的数据结构,其中FindMin返回该数据结构的最小元素 所有操作在最坏的情况下的运行时间都是O(1)
数据结构与算法分析——c语言描述 练习3.22 a 答案实现方法真是脑洞大开。。。。作者的思路stack.htypedef int ElementType;#ifndef _stack_h#define _stack_hstruct StackRecord;typedef struct StackRecord *Stack;int IsEmpty(原创 2016-03-31 11:05:43 · 1655 阅读 · 0 评论 -
仅用一个数组而实现两个栈的例程 除非数组的每一个单元都被使用 否则栈例程不能有溢出声明
数据结构与算法分析——c语言描述 练习3.21 答案两边向中间增长stack.htypedef int ElementType;#ifndef _stack_h#define _stack_hstruct StackRecord;typedef struct StackRecord *Stack;int IsEmpty1(Stack s);int IsE原创 2016-03-31 00:03:40 · 4548 阅读 · 0 评论 -
编写一个程序将后缀表达式转换成中缀表达式
数据结构与算法分析——c语言描述 练习3.20 c 答案很惭愧的说,这道题我写了好久,断断续续写了一个星期。。。。智商捉急。。。思路是这样的,后缀表达式不用管计算顺序,但是有一点是在必要的时候添加括号,我是建了一个结构,包含一个表达式和这个表达式最外层的运算符。结合的时候注意比较优先级进而添加括号。#include#include#includeusing原创 2016-03-30 18:24:32 · 6507 阅读 · 1 评论 -
中缀表达式转换成后缀表达式 计算后缀表达式的值 幂操作符添加到你的指令系统中去
数据结构与算法分析——c语言描述 练习3.19 3.20 a b 答案这道题以前发过文章。现在能支持幂^了。栈的利用挺重要的一个思想是 操作符 根据优先级分级#include#include#include#include#includeusing namespace std;#define MAXN 100char expression[MAXN]原创 2016-03-28 00:10:55 · 1945 阅读 · 0 评论 -
双端队列(deque)数组实现
数据结构与算法分析——c语言描述 练习3.26 答案很水的题。终于把第三章的课后习题答案写完了,还是有点小激动的。deque.htypedef int ElementType;#ifndef _Queue_h#define _Queue_hstruct DequeRecord;typedef struct DequeRecord *Deque;int isE原创 2016-04-01 12:43:54 · 3886 阅读 · 3 评论 -
双链表实现
数据结构与算法分析——c语言描述 第三章的双链表和单链表差不多,删除插入画个图就很形象了。double_list.htypedef int ElementType;#ifndef _List_H#define _List_Hstruct Node;typedef struct Node *PtrToNode;typedef PtrToNode List;t原创 2016-03-12 15:48:47 · 445 阅读 · 0 评论 -
树的实现 分级文件系统
数据结构与算法分析——c语言描述 第四章 树 分级文件系统编程书有一个特点,就是看的时候觉得很简单,但是写代码就蒙了,各种出错,不停debug,想办法,重新写,再debug……是一个不停思考迭代的过程。因为原理大体简单,但是细节就麻烦得不得了。模块化,分功能。就这样几个有意思的地方,递归解析地址,递归遍历。tree.htypedef char* Elem原创 2016-04-02 17:32:11 · 1335 阅读 · 0 评论 -
二叉树
数据结构与算法分析——c语言描述 第四章树 二叉树转载 2016-04-02 21:56:49 · 471 阅读 · 0 评论 -
构造一颗表达式树
数据结构与算法分析——c语言描述 第四章树 构造一颗表达式树输入一个表达式,程序转换成逆序,再然后根据逆序构建表达式树,然后再用中序遍历输出表达式。以前的文章也实现的用逆序转表达式,用栈来实现。这个用树来实现。树更加万能吧,逆序,中序,前序什么的都有。tree.h#includetypedef std::string ElementType;#ifndef _T原创 2016-04-03 11:31:46 · 3937 阅读 · 0 评论 -
AVL树
数据结构与算法分析——c语言描述 第四章树 AVL树作者给的代码答案错了,缺少了增加树的高度以往都是照抄书上的头文件,自己实现。但是这次avl树insert不会写,竟然抄了这个函数七八成的代码,思路被牵着走,删掉代码重新自己写。看思路,自己写代码,切记切记。其实还是很简单的,画个图什么都懂了。转载 2016-04-03 18:04:03 · 613 阅读 · 0 评论 -
只使用处理I/O的PrintDigit函数,编写一个过程以输出任意实数
数据结构与算法分析——c语言描述 习题1.3这道题把double的整数和小数分别提取出来。注意double在内存中的储存是接近于输入的数的,加一个0.xx5。一开始小数部分不会处理,参考了别人的代码http://blog.csdn.net/zhengken1991/article/details/37741451#include #define Prin原创 2016-03-08 21:51:36 · 5588 阅读 · 0 评论 -
使它读入被include语句修饰的一个文件并且输出这个文件
数据结构与算法分析——c语言描述 习题1.4这道题水题,就是用到了不常用的文件读写函数。递归调用。#include #include #include#include#define MAXN 105void process_line(const char *filename);int main(int argc, char **argv){ proces原创 2016-03-08 23:06:18 · 1762 阅读 · 1 评论 -
生成前N个自然数的一个随机置换
数据结构与算法分析——c语言描述 练习2.7第一个算法#include#include#include#include#define MAXN 10000000int RandInt(int i, int j){ int temp; temp = i + (1.0*rand() / RAND_MAX)*(j - i ); return temp;}in原创 2016-03-09 19:55:39 · 1755 阅读 · 0 评论 -
给出一个有效的算法来确定在整数A1<A2<A3<...<AN的数组中是否存在整数i使得Ai=i
数据结构与算法分析——c语言描述 练习2.11二分搜索改一下就行,只不过判断的是数列的下标。#include#define MAXN 1000int a[MAXN];bool binarySearch(int low, int high) { while (low <=high) { int mid = (low + high) / 2; if (a[mid]原创 2016-03-09 20:28:42 · 3264 阅读 · 1 评论 -
求最小子序列和 求最小的正序列 求最大子序列乘积
数据结构与算法分析——c语言描述 练习2.12 答案求最小子序列和 求最小的正序列,用了联机算法,线性复杂度#include#define MAXN 1000int a[MAXN];int n;int minSubsequenceSum() { int ThisSum, MinSum, i,min; ThisSum = MinSum = 0; int flag=1转载 2016-03-09 21:36:53 · 2342 阅读 · 2 评论 -
不用递归,写出快速求幂的程序
数据结构与算法分析——c语言描述 练习2.16 答案把把次数n用二进制表示,而数组是1,2,4,8,。。。log2(n)次方,二进制为1的乘以相应下标的数组。#include#includeusing namespace std;#define MAXN 1000int PowersOfXO[MAXN];int main() { int x, n, cnt, i;原创 2016-03-11 17:08:51 · 3460 阅读 · 1 评论 -
伸展树
数据结构与算法分析——c语言描述 第四章树 伸展树看了书上的思路,全靠自己独立把代码写出来了,后来才发现书上给的代码实现是放到最后一章12章了。写完我都为我的意志坚定而惊讶。花了一天和一个早上的一个小时。代码一定要靠自己写出来,很多时候代码一看就懂,但你是不知道怎么来的,架构思路方法怎么来的。不停debug不停修改代码就是一个创作思考的过程,don't be afraid.原创 2016-04-05 12:22:49 · 531 阅读 · 0 评论 -
编写任意精度整数运行包。要使用类似于多项式运算的方法。计算在2^4000内数字0到9的分布
数据结构与算法分析——c语言描述 练习3.9 答案这道题真的是要狗带了。。。。我的在vs2015 release模式只能计算到2的60次方。超过60次方就会一直卡在那。估计是有些地方没有优化好。可能是栈溢出什么的,因为函数存在相互之间互相调用。使用了我的多项式代码。日后再更新代码吧。目前也不知道怎样解决。list.htypedef struct { int C原创 2016-03-20 14:48:29 · 2478 阅读 · 0 评论 -
基于链表的基数排序
数据结构与算法分析——c语言描述 第三章的基数排序还是使用链表,特点是使用了基数排序的算法。去visualgo看一看算法动画什么都清楚了。代码参照了blackboy的。link.htypedef int ElementType;#ifndef _List_H#define _List_Hstruct Node;typedef struct Node *PtrT转载 2016-03-14 12:27:22 · 858 阅读 · 0 评论 -
链表的游标实现
数据结构与算法分析——c语言描述 第三章 链表的游标实现和普通的链表没什么区别,就是用数组来实现内存空间,并且存在两个链表,一个是未使用元素组成的链表,首元素是下标为0。另一个个就是使用中的数表。使用之前要main函数手动初始化。cursor.htypedef int ElementType;#define SpaceSize 100#ifndef _Cursor转载 2016-03-14 16:29:56 · 667 阅读 · 0 评论 -
栈的链表实现
数据结构与算法分析——c语言描述 第三章 栈就是链表的增加删除都只能是第一个元素。没什么特别的。stack.htypedef int ElementType;#ifndef _stack_h#define _stack_hstruct Node;typedef struct Node *PtrToNode;typedef PtrToNode Stack;int转载 2016-03-14 17:33:08 · 461 阅读 · 0 评论 -
Josephus问题是下面的游戏 N个人从1到N编号 围成一个圈 经过M次传递后拿着热土豆的人被清除离座
数据结构与算法分析——c语言描述 练习3.9 答案N%M,二是大于n/2可以逆向传,想不懂不写这个doubleList.htypedef int ElementType;#ifndef _double_List_H #define _double_List_H struct Node;typedef struct Node *PtrToNode;typede原创 2016-03-20 19:35:19 · 2754 阅读 · 0 评论 -
编写查找一个单链表特定元素的程序。分别使用递归和非递归方法实现,并比较它们的运行时间。
数据结构与算法分析——c语言描述 练习3.11 答案我测试栈反而是没爆,反而插入那么多元素时爆了。不知道是不是编译器做优化了。#include"list.h"#include//包含头结点的链表,所以检查的是下一个节点,本节点由上一层检查,最开始的头结点没检查Position findRecursion(List l, ElementType e) { Position p原创 2016-03-25 09:12:52 · 2029 阅读 · 0 评论 -
使用非递归过程以O(N)时间反转单链表 使用常数附加空间
数据结构与算法分析——c语言描述 练习3.12 答案书上给的答案默认是无头链表void ReserveList_L(List L) {//反转链表 Position currentPos;//原链表中p为q的前驱 Position nextPos; Position temp;//临时地址变量 if (L->Next && L->Next->Next) {//L具有两个节点转载 2016-03-25 09:30:24 · 2065 阅读 · 1 评论 -
栈的数组实现
数据结构与算法分析——c语言描述 第三章 栈的数组实现stack.htypedef int ElementType;#ifndef _stack_h#define _stack_hstruct StackRecord;typedef struct StackRecord *Stack;int IsEmpty(Stack s);int IsFull(Stack s)转载 2016-03-14 19:38:25 · 395 阅读 · 0 评论 -
栈的应用 平衡符号 后缀表达式 中缀到后缀的转换
数据结构与算法分析——c语言描述 第三章 平衡符号平衡符号#include"stack.h"#includeint isCorrespond(char c1, char c2) { if (c1 == '('&&c2 == ')') return 1; else if (c1 == '['&&c2 == ']') return 1; else return原创 2016-03-14 20:42:35 · 528 阅读 · 0 评论 -
基于链表的基数排序v2.0
数据结构与算法分析——c语言描述 第三章的基数排序之前写过了,但当时发现时间主要用在找到最后一个元素,今天重新写了,保存一个指向最后结点的指针。last指针的初始值要非常小心啊,一开始我是初始值为NULL。这样有一个问题,就是插入第一个元素的时候(头结点版链表),last指针是不会更新的!islast函数我是判断是否和last指针相等。debug了一整天,一开始想都想不明白,后来才大概摸到原创 2016-03-25 19:34:02 · 826 阅读 · 0 评论