数据结构与算法设计
文章平均质量分 77
qq_28598203
这个作者很懒,什么都没留下…
展开
-
顺序栈S中有2n个元素,从栈顶到栈底的元素依次为a2n、a2n-1、…、a1。试设计一个算法:通过一个循环队列重新排列该栈中的元素,使得从栈顶到栈底的元素先偶数,后奇数
#include#include#define STACK_INIT_SIZE 100#define QUEUE_MAX_SIZE 100#define STACK_INCREMENT 10using namespace std;typedef struct Stack //结构体定义{ int *elem; //数据域 int top; //顺序栈栈原创 2016-03-30 13:15:56 · 13531 阅读 · 12 评论 -
c语言:链队列的实现
// 链队列及其操作实现.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#includeusing namespace std;typedef struct QNode{ int data; struct QNode *next;}QNode, *Queueptr;typedef struct{ Qu原创 2016-03-28 21:52:39 · 1269 阅读 · 0 评论 -
数据结构KMP算法中next函数的求解思想及其解释
这个只是简单的next数组的求法,并没有完全实现KMP算法,有待改进原创 2016-04-10 20:09:02 · 8391 阅读 · 1 评论 -
c语言:抽签游戏实现
【问题描述】抽签是我们日常生活中经常遇到的一件事,并且其形式有很多种。这里介绍一种抽签游戏,如图3-2所示,最上面一排是游戏的参加者——称为抽签者,最下面一排是签号(奖品、公差等)。每个人依次顺着竖线往下走,当碰到横线时,即转横向前进,碰到竖线再往下,以此类推,则游戏结束后,抽签者会一一对应到最下面一排的签号。#include "stdafx.h"#include#include#i原创 2016-04-14 20:16:29 · 6317 阅读 · 0 评论 -
将对称矩阵压缩存储,实现矩阵相乘,输出相乘后结果(用二维数组)
数组地址的传送是我很容易弄错的地方,很惭愧没有学好c和c++知识,现将代码粘如下,还需改进。不是很完美!#include "stdafx.h"#include#include#include#define N 2using namespace std;//函数声明部分void Error(char *s); //错误处理函数voi原创 2016-04-12 23:17:29 · 4214 阅读 · 0 评论 -
c语言:定长顺序串的基本操作实实现
// 串的定长顺序存储实现.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#include#define STRING_SIZE 255using namespace std;typedef unsigned char SString[STRING_SIZE + 1];//函数声明部分void原创 2016-04-16 19:44:31 · 8434 阅读 · 0 评论 -
各种排序算法总结
从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综合发散而来。比如说作为最基本的排序算法就种类很多,而事实上笔试面试过程中发现转载 2016-05-26 21:28:58 · 1224 阅读 · 0 评论 -
c语言:实现奇数阶魔方阵
奇数阶魔方阵算法: 1.将第一行中间一列赋值为数值1; 2.以此进行行数减1,列数加1; 3.如果行数的下一行小于0,则将行数设置为n-1; 4.如果列数的下一列大于阶数n,则将列数设置为0; 5,如果按照上述进行后该行列处有数,则将该数放到该列的下面一行。 基本实现代码如下: (没用到数据结构的知识,用了最基本的二维数组。)int _tmain(int a原创 2016-04-13 21:37:35 · 7928 阅读 · 0 评论 -
广义表的基本操作实现
广义表的四个特征:(1)广义线性表;(2)元素复合性;(3)元素递归性;(4)元素共享性 广义表的上述四个特征对于他的使用价值和应用效果起到了很大的作用。广义表的结构相当灵活,它可以兼容线性表、数组、树和有向图等各种常用的数据结构。当二维数组的每行或每列作为子表处理时,二维数组就是一个广义表;如果限制广义表中元素的共享和递归,广义表和树对应;如果限制广义表的递归并允许数据共享,则广义表和原创 2016-04-21 19:19:23 · 15852 阅读 · 3 评论 -
图的邻接表表示及其深度优先搜索实现
// 图的邻接表的实现及其遍历.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#define MaxVertexNum 100using namespace std;typedef int Vertex;typedef int WeightType;typedef char DataType;原创 2016-06-07 20:46:06 · 1127 阅读 · 0 评论 -
最小生成树之Prim算法实现
基本架构:先创建好一个邻接矩阵表示的图,然后按照prim算法思想找到最小生成树,注意将邻接矩阵表示的图在求最小生成树的时候转化为邻接表。Prim 算法思想:void Prim(){MST={V0};while(1){v=未收录顶点中dist最小的一个;if(这样的v不存在) break; 将v收录进MST中:dist[V]=0;for(v的每个原创 2016-06-07 21:03:21 · 737 阅读 · 0 评论 -
堆的操作实现—大根堆
程序中有一个BUG,插入函数有一点问题,替换出现问题,待改进!// 堆的操作实现.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#define MAXDATA 1000#define Error -1using namespace std;typedef int ElementType;type原创 2016-06-08 02:13:22 · 1315 阅读 · 0 评论 -
c语言:二叉排序树的实现
好长时间没更新博客了!// 二叉排序树的实现最终版.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#define ElementType charusing namespace std;typedef struct TreeNode *BinTree;typedef BinTree po原创 2016-05-22 00:21:56 · 1832 阅读 · 0 评论 -
C语言:平衡二叉树的实现(AVL)
// AVL(二叉平衡树)树的实现.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#define ElementType charusing namespace std;typedef struct AVLNode *Position;typedef Position AVLTree; //AVL原创 2016-05-22 00:24:43 · 1683 阅读 · 3 评论 -
C语言:线索二叉树的线索化及其遍历实现
前序和中序遍历都实现了,后序线索化还不是很明白!如有大神看到,望指正!不胜感激!// 中序线索二叉树实现.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#includeusing namespace std;#define ElementType chartypedef enum{ Link, Thread }原创 2016-05-23 00:31:01 · 8136 阅读 · 6 评论 -
c语言:图的邻接矩阵的建立与广度优先搜索实现
很长一段时间没更新博客了,好惭愧啊!有待改进!// 无向图的构建及遍历.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#includeusing namespace std;#define Infinity MAX;//邻接矩阵数据结构定义#define vertex_Max 20typedef enum{ DG, DN,原创 2016-05-16 16:37:09 · 5654 阅读 · 1 评论 -
求Fibonacci数列,吸血鬼数,素数等实现
一.Fibonacci数列实现 斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。 1,非递归实现/** * *Java 编程思想 第四版原创 2016-07-24 16:20:58 · 1126 阅读 · 0 评论 -
c语言:循环队列的实现
#include#include#include#define QUEUE_MAX_SIZE 100using namespace std;typedef struct Sqqueue{ int *data; int front; int rear;}Sqqueue;//函数声明void Error(char *s);原创 2016-03-28 20:04:46 · 1049 阅读 · 0 评论 -
c语言:链栈的实现
#include#include#include#define LEN sizeof(struct LNode)using namespace std;typedef struct LNode{ int data; struct LNode *next;}LNode;typedef struct LinkStack{ LNode *top;}LinkStack;//函数原创 2016-03-28 17:17:05 · 892 阅读 · 0 评论 -
c语言:顺序栈的应用-进制转换
#include#include#define STACK_INIT_SIZE 100#define STACK_INCREMENT 10using namespace std;typedef struct Stack //结构体定义{ int *elem; //数据域 int top; //顺序栈栈顶 int stacksize; //顺序栈当原创 2016-03-27 23:25:23 · 1924 阅读 · 0 评论 -
c语言:顺序栈的应用(二) 判断回文数
#include#include#define STACK_INIT_SIZE 100#define STACK_INCREMENT 10using namespace std;typedef struct Stack //结构体定义{ int *elem; //数据域int top; //顺序栈栈顶int stacksize;原创 2016-03-30 13:28:46 · 8771 阅读 · 0 评论 -
c语言:约瑟夫环的实现
#include#include#include#define LEN sizeof(struct Node)using namespace std;typedef struct Node{ int data; struct Node *next;}Node;typedef Node *linklist;void CreatNode (linklist &L,int n)原创 2016-03-20 14:50:01 · 624 阅读 · 0 评论 -
求链表结点的阶乘和
本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内。函数接口定义:int FactorialSum( List L );其中单链表List的定义如下:typedef struct Node *PtrToNode;struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下原创 2016-03-08 22:10:04 · 525 阅读 · 0 评论 -
c语言:多项式相加的实现
#include#include#include#define NULL 0#define LEN sizeof(struct ADD)using namespace std;struct ADD //定义结构体{ float xishu; //数据域 int zhishu; struct ADD *next; //指针域}; voi原创 2016-03-21 23:51:01 · 3992 阅读 · 1 评论 -
c语言:双向链表的实现
#include#include#include#define LEN sizeof(struct DNodelist)using namespace std;typedef struct DNodelist //定义结构体{ int data; //结点数据域 struct DNodelist *prior;//结点前向指针 struct DN原创 2016-03-25 15:25:40 · 686 阅读 · 0 评论 -
c语言:顺序表的实现(二 ) 就地逆置,有序合并,大小调整。
#include#include#define LIST_INIT_SIZE 100using namespace std;struct Node{ int *elem; int Length; int Listsize;};void Error(char *s) //错误处理函数{ cout << s << endl; exit(1);}void InitNo原创 2016-03-22 23:31:20 · 2277 阅读 · 0 评论 -
c语言:顺序表的实现(三)将元素e插入到一个递减有序表中,不改变顺序表的递减有序性。
#include#include#define LIST_INIT_SIZE 100using namespace std;struct Node{ int *elem; int Length; int Listsize;};void Error(char *s) //错误处理函数{ cout << s << endl; exit(1);}void InitNo原创 2016-03-22 23:47:23 · 1875 阅读 · 0 评论 -
c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
#include#include#define LIST_INIT_SIZE 100#define LIST_INCREMENT 10using namespace std;struct Sqlist{ long *elem, *newlist; int Length; int listsize;};void Error(char *s){ cout << s << end原创 2016-03-22 00:00:49 · 29157 阅读 · 2 评论 -
c语言:单链表的实现(一) 创建,插入,删除,查找
#include#include#include#define NULL 0#define LEN sizeof(struct Student)using namespace std;typedef struct Student{ int length; int num; struct Student *next;}Student; typedef Student *Lin原创 2016-03-21 23:56:37 · 6098 阅读 · 1 评论 -
C语言:单链表实现(二) 就地逆置,就地归并
#include#include#include#define LEN sizeof(struct Nodelist)using namespace std;typedef struct Nodelist{ int data;; struct Nodelist *next;}Nodelist;//函数声明void Error(char *s);原创 2016-03-25 19:12:00 · 2052 阅读 · 0 评论 -
c语言:表达式求值实现(包含加减乘除括号)
这道题不难,但是当你认真去编代码的时候,还是要考虑好多细节,所以不能只停留在看懂的层面上,不去实践你永远不知道你到底掌握了没有,加油! 之前的表达式求值不包括括号运算,现将改进后的代码和源代码粘在上面,便于以后的复习。一.不包括括号运算#include #include #include #include #include #define STACK_INIT_S原创 2016-04-12 09:50:40 · 35750 阅读 · 8 评论 -
c语言:单向循环链表的实现
// 单循环链表的实现.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#define LEN sizeof(struct SCriculist)using namespace std;typedef struct SCriculist //定义结构体{ int data;原创 2016-03-26 02:05:07 · 3185 阅读 · 1 评论 -
c语言:双向循环链表的实现
// 双向循环链表实现.cpp : 定义控制台应用程序的入口点。#include#include#include#define LEN sizeof(struct DSCriculist)using namespace std;typedef struct DSCriculist //定义结构体{ int data; //数据域 struct原创 2016-03-26 11:34:28 · 1415 阅读 · 0 评论 -
c语言:用双向链表实现双端队列(队列两端都可以进行入队出队操作)
//双端队列的实现:队列左为端口1,队列右为端口2#include#include#include#define LEN sizeof(struct DQueuelist)using namespace std;typedef struct DQueuelist //定义结构体结点{ int data; //结构体数据域 struct DQue原创 2016-04-08 14:22:31 · 11607 阅读 · 2 评论 -
c语言:顺序栈的实现
#include#include#include#define STACK_INIT_SIZE 100#define STACK_INCREMENT 10using namespace std;typedef struct Stack //结构体定义{ int *elem; //数据域 int top; //顺序栈栈顶 int stacksize;原创 2016-03-27 22:12:11 · 3720 阅读 · 0 评论 -
算法思想总结
五大常用算法之一:分治算法分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……转载 2016-07-15 08:06:38 · 1543 阅读 · 0 评论