数据结构
Acmer之家
ACM养成之路
展开
-
删除以某个节点为根节点的子树
编写一个程序,假设二叉树中节点值为单个字符,且均不相同,采用二叉链存储,设计递归算法求值为x的子树并删除该子树,给出删除以节点D为子树的结果。代码:#include #include typedef char ElemType;typedef struct Node{ ElemType data; Node *Lchild,*Rchild;} BiTN原创 2018-05-07 20:41:01 · 5507 阅读 · 0 评论 -
二叉树的建立及遍历
假设二叉树为: a b c d e 因为程序中要知道叶子结点(终点),所以要将上面原创 2017-06-02 20:53:03 · 423 阅读 · 0 评论 -
二叉树的横向显示
#include #include typedef char ElemType;typedef struct Node{ ElemType data; Node *Lchild,*Rchild;} BiTNode,*BiTree;BiTree CreateBiTree();//建立二叉树void PrintTree(BiTree T,int h);//二叉树的横向原创 2017-06-01 22:01:30 · 2615 阅读 · 1 评论 -
求二叉树高度
#include #include typedef char ElemType;typedef struct Node{ ElemType data; Node *Lchild,*Rchild;} BiTNode,*BiTree;int depth2=0;BiTree CreateBiTree();//建立二叉树int PostTreeDepth(BiTree原创 2017-06-01 21:48:37 · 470 阅读 · 0 评论 -
统计二叉树中叶子节点的数目
#include #include typedef char ElemType;typedef struct Node{ ElemType data; Node *Lchild,*Rchild;} BiTNode,*BiTree;int ans=0;BiTree CreateBiTree();//建立二叉树void Leaf1(BiTree T);//后序遍历统原创 2017-06-01 20:51:03 · 32392 阅读 · 0 评论 -
输出二叉树中的叶子节点
#include #include typedef char ElemType;typedef struct Node{ ElemType data; Node *Lchild,*Rchild;} BiTNode,*BiTree;BiTree CreateBiTree();//建立二叉树void PreOrder(BiTree T);//先序遍历,输出叶子节点原创 2017-06-01 20:35:31 · 8883 阅读 · 1 评论 -
循环队列的定义及操作
#include #include #define MAXSIZE 50typedef struct{ int element[MAXSIZE]; int front; //队头指示器 int rear; //队尾指示器} SeqQueue;void InitQueue(SeqQueue *Q);//初始化操作,将Q初始化为一个空的循环队列bool En原创 2017-05-21 18:32:15 · 7364 阅读 · 0 评论 -
链队列的定义及相关操作
#include #include typedef struct node{ int data; node *next;} Node,*LinkQueueNode;typedef struct{ LinkQueueNode front; //队头指针 LinkQueueNode rear; //队尾指针} LinkQueue;int GetL原创 2017-05-21 15:54:54 · 3157 阅读 · 0 评论 -
STL中优先队列(priority_queue)的相关操作
基本操作:empty() 如果队列为空返回真pop() 删除对列首元素push() 加入一个元素size() 返回优先队列中拥有的元素个数top() 返回优先队列首元素在默认的优先队列中,优先级高的先出队。(1)优先队列的第一种用法,这是最常用的默认的优先级用法,也就是优先级高的先出队列,例如说一个int优先队列,那么转载 2017-05-21 13:19:37 · 690 阅读 · 0 评论 -
二叉树的层次遍历、哈夫曼树及哈夫曼编码的建立
#include #include #define N 100 //叶子结点数#define M 2*N-1 //树中结点总数#define MAXN 0x7ffffffftypedef char ElemType;typedef struct Node{ ElemType data; Node *Lchild,*Rchild;} BiTNo原创 2017-06-08 21:31:34 · 1533 阅读 · 0 评论 -
哈希查找
针对某个集体(如您所在的班级)中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。代码:#include #include #include #include #define MAX 78#define NULLKEY 0x7fffffffusing namespace std;typedef struct{ int *elem;原创 2017-06-22 16:55:26 · 894 阅读 · 0 评论 -
【数据结构】最短路径——Dijkstra算法
最短路径——Dijkstra算法设计实现有向网,针对随机有向网实例和随机源点,用Dijkstra算法求解出单源点到其他各顶点的最短路径。给出求解过程的动态演示。可考虑实现不用存储结构上的实现。如下图所示,若要建立一个这样的图,且源点为1时,则输入顺序为:5 7 1 2 101 5 1001 4 302 3 503 5 104 3 204 5 60原创 2017-09-21 20:39:58 · 1726 阅读 · 0 评论 -
【数据结构】公交线路管理
公交线路管理问题描述: 对公交车线路信息的简单模拟,用菜单选择方式完成建立公交路线信息、修改公交路线信息和删除公交路线信息及其他相关功能。代码:#include #include #include #include using namespace std;typedef struct linknode{ int num;//车号原创 2017-09-21 20:37:52 · 10185 阅读 · 0 评论 -
折半插入排序
#include using namespace std;int main(void){ int n,k,mid,midval,low,high,x; cin>>n; k=n; int *a=new int[n]; for(int i=0; i<n; i++) a[i]=k--; for(int i=1; i<n; i++)原创 2017-07-03 16:01:38 · 196 阅读 · 0 评论 -
迪杰斯特拉算法
代码:#include#include#define INF 1<<28#define MAX 300using namespace std;int v,e,s;int graph[MAX][MAX];//图的存储采用邻接矩阵int dist[MAX];//dist表示当前距源点最短距离,最终为最短距离bool visit[MAX];//标记为已找出最短路径的点typedef原创 2017-06-11 19:25:44 · 246 阅读 · 0 评论 -
拓扑排序
#include #include#define MAX 9999#define M 1000int indegree[MAX];typedef int ElemType;typedef struct //定义一个顺序栈{ ElemType data[M];//栈中最多可放M个元素 int top;//用来存放栈顶元素的下标,top为-1表示栈空} SeqSt原创 2017-06-11 17:04:14 · 367 阅读 · 0 评论 -
图的邻接表表示法及遍历
来看下面的一个简单的图, 那么这样的一个图,我们应该用什么存储结构来存储它呢?常用的是邻接矩阵和邻接表,这里邻接矩阵不做讲解,如下所有代码都是以邻接表作为存储结构,所以这里就只讲解下邻接表。那么什么是邻接表呢?如何构造呢? 邻接表是一种链式存储。就如上图,一共有四个顶点(分别是A,B,C,D),邻接表就是为这四个顶点的每个顶点建立一原创 2017-06-11 14:05:16 · 3509 阅读 · 0 评论 -
图的邻接矩阵存储及遍历
图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:我们来看一个实例,图7-4-2的左图就是一个无向图。我们再来看一个有向图样例,如图7-4-3所示的左图。在图的术语原创 2017-06-11 11:48:55 · 4047 阅读 · 0 评论 -
插入排序
#include void swap(int &x, int &y){ int temp = x; x = y; y = temp;}void insertion(int a[], int sz){ for(int i=1; i < sz; i++) { int j = i; while(j > 0 && (a原创 2017-06-22 16:57:08 · 226 阅读 · 0 评论 -
建立中序线索树
#include #include typedef char ElemType;typedef struct Node{ int Ltag,Rtag; ElemType data; Node *Lchild,*Rchild;} BiTNode,*BiTree;BiTNode *pre=NULL;BiTree CreateBiTree();//建立二叉树原创 2017-06-02 21:50:17 · 818 阅读 · 0 评论 -
删除链表中重复的元素
#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_end(int n);//尾插法建立链表void ShowList(Linklist L);//输出链表内容void Del原创 2017-06-01 19:50:46 · 620 阅读 · 0 评论 -
STL中队列的相关操作
基本操作:push(x) 将x压入队列的末端pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值front() 返回第一个元素(队顶元素)back() 返回最后被压入的元素(队尾元素)empty() 当队列为空时,返回truesize() 返回队列的长度#include #include using原创 2017-05-21 13:14:53 · 310 阅读 · 0 评论 -
kmp算法
通过建立一个next数组,指示当某个元素失配时,子串移动到何处再重新匹配。c++代码:#include #include #define MAXN 200using namespace std;void get_next(string T,int *next);//获得next数组int kmp(string S,string T);//返回子串T在主串S中的下标位置,若不存在,原创 2017-05-30 15:57:48 · 180 阅读 · 0 评论 -
单链表的排序与销毁
#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_end(int n);//尾插法建立链表void Sort(Linklist L);//冒泡排序void ShowList(原创 2017-05-18 20:46:30 · 713 阅读 · 0 评论 -
建立循环单链表
#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;Linklist CreateList_end(int n);void ShowList(Linklist L);int main(void){ Linklist L1; int n;原创 2017-05-18 19:48:20 · 4696 阅读 · 1 评论 -
合并两个有序单链表
#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_end(int n);//尾插法建立链表Linklist MergeLinklist(Linklist LA,Linklist原创 2017-05-18 18:48:42 · 495 阅读 · 0 评论 -
单链表的建立与输出
链表可以用头插法建立,也可以用尾插法建立。然而头插法虽然操作简单一点,顺序却与输入顺序相反,尾插法虽然操作复杂一点,但是顺序却与输入顺序一致,所以建议使用尾插法。一、头插法建立链表1、不用函数代码:#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linkl原创 2017-05-18 17:30:09 · 5162 阅读 · 0 评论 -
单链表的查找
单链表查找可分为按值查找和按序号查找。代码:#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_end(int n);//尾插法建立链表Linklist findval(原创 2017-05-18 17:48:54 · 1022 阅读 · 1 评论 -
求单链表长度
#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_end(int n);//尾插法建立链表void ShowList(Linklist L);//输出链表内容int Link原创 2017-05-18 17:34:58 · 34001 阅读 · 7 评论 -
合并两个循环单链表
#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;Linklist CreateList_end(int n);//建立循环单链表Linklist Merge(Linklist RA,Linklist RB);//合并两个循环单链表void Show原创 2017-05-20 10:31:55 · 1834 阅读 · 0 评论 -
双向链表的建立与输出
#include #include typedef struct linknode//定义双向链表{ int data; linknode *prior,*next;} Node,*Linklist;Linklist Createlist(int n);//建立双向链表void Showlist(Linklist L);//输出双向链表int main(void原创 2017-05-20 11:43:04 · 3741 阅读 · 0 评论 -
STL中的(list)链表
1 定义一个list#include #include #include using namespace std;int main (void){ list Milkshakes; return 0;}2 使用list的成员函数push_back和push_front插入一个元素到list中#include #include #includ转载 2017-05-20 20:47:16 · 1125 阅读 · 0 评论 -
链栈的定义及相关操作
#include #include typedef int ElemType;typedef struct linknode{ ElemType data; linknode *next;} Node,*LinkStack;void PrintStack(LinkStack top);//打印栈中的元素void DestroyStack(LinkStack top原创 2017-05-20 18:31:45 · 1840 阅读 · 0 评论 -
双端顺序栈基本操作
#include #define M 1000typedef char ElemType;typedef struct //定义一个双端顺序栈{ ElemType data[M];//栈区 int top[2];//top[0]和top[1]分别为两个栈顶指示器} SeqStack;void InitStack(SeqStack *s)//创建一个双端顺序栈{原创 2017-05-20 17:19:03 · 1542 阅读 · 0 评论 -
顺序栈的定义及相关操作
#include #define M 1000typedef char ElemType;typedef struct //定义一个顺序栈{ ElemType data[M]; int top;} SeqStack;void InitStack(SeqStack *s)//创建一个栈{ s->top=-1;}bool Push(SeqStack *原创 2017-05-20 15:25:30 · 11732 阅读 · 2 评论 -
向单链表中插入、删除节点
#include#include typedef struct linknode{ int data; linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_end(int n);//尾插法建立链表void ShowList(Linklist L);//输出链表内容void Add原创 2017-05-18 18:04:54 · 1287 阅读 · 2 评论 -
STL中stack(栈)的用法
stack 模板类的定义在头文件中。stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque。定义stack 对象的示例代码如下:stack s1;stack s2;stack 的基本操作有:入栈,如例:s.push(x);出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不原创 2017-05-20 14:01:20 · 5554 阅读 · 0 评论 -
双向链表的插入与删除节点
#include #include typedef struct linknode//定义双向链表{ int data; linknode *prior,*next;} Node,*Linklist;Linklist Createlist(int n);//建立双向链表void Addnode(Linklist L,int i,int x);//向链表中的第i个位置原创 2017-05-20 13:58:27 · 2737 阅读 · 0 评论 -
双向链表的查找
#include #include typedef struct linknode//定义双向链表{ int data; linknode *prior,*next;} Node,*Linklist;Linklist Createlist(int n);//建立双向链表int Find(Linklist L,int x);//在链表中查找值为x的下标void Sh原创 2017-05-20 13:21:14 · 4174 阅读 · 2 评论 -
STL中string类的用法总结
要想使用标准C++中string类,必须要包含#include // 注意是,不是,带.h的是C语言中的头文件,加上using namespace std;string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数转载 2017-05-23 10:54:10 · 934 阅读 · 0 评论