数据结构应用实例
咸蛋超人1号
这个作者很懒,什么都没留下…
展开
-
与栈有关:如何判断括号的合法性
首先说一下思路:定义一个栈s,然后遍历字符串str,遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号,看是否匹配。char leftOf(char c){ if (c == '}') return '{'; if (c == ']') return '['; return ')';}bool isValid(string str){ stack<char> ...原创 2019-11-13 11:06:04 · 187 阅读 · 0 评论 -
图的最短路径
从一顶点到其余各顶点的最短路径:/*从一顶点到其余各顶点的最短路径*/#ifndef DJKSTRAvoid PATH(adjlist path, int m, int j) //m = 1,j = 2/3{ edgenode *p,*q,*s; //把顶点j的当前最短路径清除掉 p = path[j]; while (p != NULL) { path[j] = p-&g...原创 2018-04-11 12:50:20 · 166 阅读 · 0 评论 -
将中缀表达式转换为后缀表达式
函数如下:void Change(char *s1,char *s2){ Stack R; InitStack(R); Push(R,'@'); int i = 0; //用于指示扫描s1串中字符的位置,初值为0 int j = 0; //用于指示s2串中待存字符的位置,初值为0 char ch = s1[i]; while(ch != '@') { switch(ch)...原创 2018-04-05 09:20:59 · 369 阅读 · 0 评论 -
编写一个算法输出n个布尔量的所有可能的组合
#include <iostream>using namespace std;enum Boolean{True,False};int cnt = 0;void Coding(Boolean b[],int k,int n){ if(k == n) { for(int i = 0; i < n; i++) cout<<b[i]; c...原创 2018-04-05 09:42:00 · 548 阅读 · 0 评论 -
求解迷宫问题
/*求解迷宫问题*/#include <iostream>using namespace std;const int m = 6;const int n = 8;int maze[m+2][n+2]; //m×n大小的迷宫,0可前进,1通行受阻。并且在迷宫的周围镶上边框int mark[m+2][n+2]; //保存访问标记,0未访问,1已访问int M[4]...原创 2018-04-05 10:59:16 · 180 阅读 · 0 评论 -
二叉树
.h文件:/*二叉树独立结点的链式存储*/typedef char ElemType;struct BTreeNode{ ElemType data; BTreeNode *left; BTreeNode *right; BTreeNode *parent;};//初始化二叉树void InitBTree(BTreeNode* &BT){ BT = NULL;...原创 2018-04-05 13:15:38 · 390 阅读 · 0 评论 -
中序线索二叉树
/*中序线索二叉树*/#include <iostream>using namespace std;typedef char ElemType;struct TTreeNode{ ElemType data; TTreeNode *left; TTreeNode *right; int ltag; int rtag;};//对二叉树进行中序线索化即建立...原创 2018-04-05 15:52:40 · 420 阅读 · 0 评论 -
二叉查找树
.h文件:/*二叉查找(排序)树*/struct BTreeNode{ ElemType data; BTreeNode *left; BTreeNode *right;};//#define FLAG#ifdef FLAG//二叉排序树的查找(递归)int Find(BTreeNode *BST,ElemType &item){ if(BST == NULL...原创 2018-04-05 20:11:16 · 115 阅读 · 0 评论 -
广义树
假定建立树的存储结构采用标准形式。建立树的存储结构就是在内存中生成一棵树的标准形式的存储映像,即三叉链表。在树的生成算法中,需要设置两个堆栈,一个用来存储指向根结点的指针,以便孩子结点向双亲结点链接之用,另一个用来存贮待链接的孩子结点的序号,以便能正确地链接到双亲结点的指针域。假定这两个栈分别用s和k表示,s和k栈的深度不会大于整个树的深度。按层遍历定义为:先访问第一层结点(即树根结点),再从左到...原创 2018-04-05 21:32:14 · 772 阅读 · 0 评论 -
拓扑排序及关键路径
const int MaxVertexNum = 50;struct edgenode{ int adjvex; //邻接点 int weight; edgenode *next; //指向下一个边结点的链域};typedef edgenode *adjlist[MaxVertexNum];/*把这种顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(Activ...原创 2018-04-13 17:30:22 · 457 阅读 · 0 评论 -
一些常用的查找算法
/*顺序表查找*/const int MaxSize = 50;typedef int KeyType;struct SeqList{ KeyType key; int data;};typedef SeqList ElemType;ElemType A[MaxSize];//顺序查找#ifndef SEQSCHint Seqsch(ElemType A[],...原创 2018-04-13 21:52:27 · 325 阅读 · 0 评论 -
栈的链式存储
.h文件:/*栈的链式存储*/#include <iostream>using namespace std;typedef int ElemType;struct LNode{ ElemType data; LNode *next;};//初始化void InitStack(LNode* &HS){ HS = NULL;}//清空栈vo...原创 2018-04-03 22:05:16 · 119 阅读 · 0 评论 -
栈的应用之后缀表达式求值
在这里使用的是顺序栈,头文件可参考前文.cpp文件:/*后缀表达式的求法*/#include <iostream>#include <strstream>using namespace std;typedef float ElemType;const int StackMaxSize = 50;struct Stack{ ElemType s...原创 2018-04-03 21:48:59 · 1037 阅读 · 0 评论 -
单链表的链式存储之独立结点构成
例:编写一个程序依次实现如下功能:(1)让计算机产生出20个0一9之间的随机整数并依次保存到单链表中;(2)输出遍历单链表;(3)从单链表中删除与给定值相等的所有结点;(4)输出遍历单链表;(5)输出单链表的长度。由独立结点构成的单链表.h文件:/*由独立结点构成的单链表*///初始化void InitList(LNode* &HL){ HL = NULL;}//清空单链表...原创 2018-03-30 21:36:10 · 710 阅读 · 0 评论 -
线性表的链式存储之元素结点构成
例 (1)让计算机产生出20个0一99之间的随机整数并利用数组把它们按升序链接起来; (2)按照随机数产生的顺序显示出它们; (3)按照升序链接的顺序显示出它们; (4)按照升序链接的顺序显示出它们,并显示出它们之间的链接指针,要求每个结点的显示格式为“( data域值,next域值)”,并且规定每行显示7个结点数据; (5)把该数组写人到文件、:xxkl . dat',中...原创 2018-03-31 15:39:27 · 346 阅读 · 0 评论 -
图的存储结构及最小生成树
.h文件:const int MaxVertexNum = 50;const int MaxEdgeNum = 100;typedef int VertexType;typedef VertexType vexlist[MaxVertexNum];typedef int adjmatrix[MaxVertexNum][MaxVertexNum];#ifndef ADJMATRIX/...原创 2018-04-08 21:07:28 · 934 阅读 · 0 评论 -
哈希查找
const int MaxSize = 50;typedef int KeyType;struct SeqList{ KeyType key; int data;};typedef SeqList ElemType;/*散列(哈希)查找*///除留余数法int Hash(char *k, int m){ int len = strlen(k); unsigned...原创 2018-04-14 21:25:57 · 230 阅读 · 0 评论 -
B_树
/*树表查找*/typedef int KeyType;const int MaxKey = 65535;/*B_树*///结点类型定义const int m = 10;struct MBNode{ int keynum; //关键字个数域 MBNode *parent; //指向父结点的指针域 KeyType key[m+1]; //保存n个关键字的域,下标0位置...原创 2018-04-14 22:20:59 · 169 阅读 · 0 评论 -
栈的顺序存储(1)
例:从键盘上输入一批整数,然后按照相反的次序打印出来。.h文件:/* 栈的顺序存储 *///初始化void InitStack(Stack &S){ S.top = -1;}//清空栈void ClearStack(Stack &S){ S.top = -1;}//检查一个栈是否为空int StackEmpty(Stack &S){ ret...原创 2018-04-02 20:34:47 · 249 阅读 · 0 评论 -
栈的顺序存储(2)
例:堆栈在计算机语言的编译过程中用来进行语法检查,试编写一个算法,用来检查一个C+十语言程序中的花括号、方括号和圆括号是否配对,若能够全部配对则返回1,否则返回0。问题分析:在这个算法中,需要扫描待检查程序中的每一个字符,当扫描到每个花、方、圆左括号时,令其进栈,当扫描到每个花、方、圆右括号时,则检查栈顶是否为相应的左括号,若是则做退栈处理,若不是则表明出现了语法错误,应返回0。当扫描到程序文件结...原创 2018-04-02 21:06:59 · 354 阅读 · 2 评论 -
栈的顺序存储(3)
例:把十进制整数转换为二至九之间的任一进制数输出。由计算机基础知识可知,把一个十进制整数x转换为任一种:进制数得到的是一个r进制的整数,假定为y,转换方法是逐次除基数r取余法。具体叙述为:首先用十进制整数%除以基数r,得到的整余数是r进制数y的最低位y0,接着以二除以r的整数商作为被除数,用它除以r得到的整余数是y的次最低位y1,依次类推,直到商为0时得到的整余数是y的最高位ym,假定,共有m十1...原创 2018-04-02 21:22:35 · 155 阅读 · 0 评论 -
使用队列的程序举例(1)
.h文件:/*循环队列的顺序存储*///初始化void InitQueue(Queue &Q){ //把队首和队尾指针置为同一个下标值0表示队空 Q.front = Q.rear = 0;}//清空队列void ClearQueue(Queue &Q){ Q.front = Q.rear = 0;}//检查队列是否为空int QueueEmpty(...原创 2018-04-03 20:40:20 · 1742 阅读 · 0 评论 -
使用队列的程序举例(2)
.h文件:/*循环队列的链式存储*///初始化void InitQueue(LinkQueue &HQ){ HQ.front = HQ.rear = NULL;}//清空队列void ClearQueue(LinkQueue &HQ){ LNode *p = HQ.front; while(p != NULL) { HQ.front = p->next; delete p...原创 2018-04-03 20:49:24 · 1118 阅读 · 0 评论 -
线性表顺序存储
.h文件#include <iostream>using namespace std;//初始化void InitList(List &L){ L.size = 0;}//删除所有元素void ClearList(List &L){ L.size = 0;}//求表长int ListSize(const List L){ return...原创 2018-03-30 19:44:49 · 126 阅读 · 0 评论