Data Structure
yanjiangbo
后端开发工程师(PHP PYTHON GO)
展开
-
数据结构之绪论
程序设计 = 对实际问题选择一种好的数据结构 + 设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。原创 2010-08-10 16:06:00 · 612 阅读 · 0 评论 -
数组、链表实现栈(C语言版)
#include #define MAX_SIZE 50typedef struct Stack{ int data[MAX_SIZE]; int top;}stack;void InitStack(stack *s){ s->top = -1;}int IsFull(stack *s){ return (s->top == MAX_SIZE - 1);}in原创 2013-09-18 16:40:39 · 1336 阅读 · 0 评论 -
冒泡排序
void BubbleSort(int a[],int n){ int i,j,tmp,exchange; for(i=0;i<n;i++) { exchange = 0; //本趟排序开始前,交换标志应为假 for(j=n-1;j>i;j--) //采用自下向上扫描的方法,让小数冒出来 { if(a原创 2013-10-29 11:21:29 · 659 阅读 · 0 评论 -
【二叉树】求树的高度(深度)
//求二叉树的深度int GetDepth(bnode *root){ if(root == NULL) { return 0; } int leftDepth = GetDepth(root->pLeft); int rightDepth = GetDepth(root->pRight); return (leftDepth原创 2013-10-15 12:31:35 · 4129 阅读 · 0 评论 -
直接插入排序
void InsertSort(int a[],int n){ int i,j,tmp; for(i=1;i<n;i++) { j = i; tmp = a[j]; while(j > 0 && tmp < a[j-1]) { a[j] = a[j-1]; j--;原创 2013-10-29 15:12:22 · 670 阅读 · 0 评论 -
【二叉树】中序遍历二叉树
//递归中序遍历二叉树void InOrder1(BinTree *root){ if(root != NULL) { InOrder1(root->lchild); printf("%c",root->data); InOrder1(root->rchild); }}//非递归中序遍历二叉树 --- 用栈实现vo原创 2013-10-29 20:11:05 · 902 阅读 · 0 评论 -
选择排序
void SelectSort(int a[],int n){ int i,j,k,tmp; for(i=0;i<n-1;i++) { k = i; for(j=i+1;j<n;j++) { if(a[j] < a[k]) { k = j;原创 2013-10-29 15:54:56 · 584 阅读 · 0 评论 -
希尔排序
void ShellSort(int a[],int n){ int i,j,d,tmp; d = n/2; while(d>=1) { for(i=d;i<n;i++) { tmp = a[i]; j = i-d; while(j>=0 && tmp < a[j]) {原创 2013-10-29 16:48:46 · 681 阅读 · 0 评论 -
堆排序
void HeapAdjust(int a[],int s,int t){ int rc = a[s]; int j; for(j=2*s+1;j<=t;j=2*j+1) { if(j<t && a[j] < a[j+1]) j=j+1; if(rc >= a[j]) break; a[s] = a[j];原创 2013-10-29 18:01:03 · 623 阅读 · 0 评论 -
【二叉树】先序遍历二叉树
//递归先序遍历二叉树void PreOrder1(BinTree *root){ if(root != NULL) { printf("%c",root->data); PreOrder1(root->lchild); PreOrder2(root->rchild); }}//非递归先序遍历二叉树 --- 用栈实现原创 2013-10-29 20:07:01 · 899 阅读 · 0 评论 -
【二叉树】判断一棵二叉树是否是平衡二叉树
//是否是平衡二叉树int IsBalanceTree(bnode *root){ if(root == NULL) { return 1; } int leftDepth = GetDepth(root->pLeft); int rightDepth = GetDepth(root->pRight); int distanc原创 2013-10-15 12:32:55 · 1056 阅读 · 0 评论 -
根据前序遍历、中序遍历构建二叉树,并后序遍历输出。
前序遍历:abdeijcfg中序遍历:dbiejafcg#include typedef struct BinaryTreeNode{ char data; struct BinaryTreeNode *lchild; struct BinaryTreeNode *rchild;}Node;void MakeBinaryTree(Node **root,char *pre原创 2013-07-30 13:24:49 · 2278 阅读 · 0 评论 -
二路归并排序
#include void MergeArray(int a[],int s,int m,int t){ int i = s; int j = m+1; int tmp[t+1]; int k=0; while(i<=m && j<=t) { if(a[i] <= a[j]) { tm原创 2013-10-10 10:47:49 · 685 阅读 · 0 评论 -
【链表】merge两个非递减的链表为一个非递减的链表
void MergeList(LinkList *la, LinkList *lb, LinkList *lc){ LinkList *pa,*pb,*pc; lc = pc = la; pa = la->next; pb = lb->next; while(pa != NULL && pb !=NULL) { if(pa->data data) { pc->nex原创 2013-08-23 14:27:39 · 884 阅读 · 0 评论 -
广度优先遍历二叉树
对于广度优先遍历二叉树,也就是按层次的去遍历。依次遍历根节点,然后是左孩子和右孩子。在这里,我们需要根据左右孩子的顺序来输出,所以就是先进先出的原则,那么我们当然就想到了队列这个数据结构。可以在rear依次插入左右孩子,在front依次读取并删除左右孩子,这样就保证了层次的输出。void BreathFirstSearch(BTree *root){ Queue queue = new Q原创 2013-07-31 12:59:31 · 767 阅读 · 0 评论 -
简单易用的单链表
最常用的数据结构--->单链表原创 2010-08-18 14:54:00 · 1011 阅读 · 0 评论 -
查找的3种算法
顺序查找、二分查找(折半查找)、散列查找(哈希查找)原创 2011-07-08 14:35:43 · 696 阅读 · 0 评论 -
何为链表?
链表是一种使用比较频繁的数据结构,似一条链子一样的数学抽象模型。它能解决很多数学题目,比如猴子选大王问题。链表也是一种线性结构,他的全名叫线性表的链式存储结构,之所以这么叫,是因为他还有个哥哥,叫线性表的顺序存储结构,哥哥有他的优点:随机存取速度快;但是也有自身的弱点:在作Insert或Delete操作时,需要移动大量元素,效率低。哥弟俩的区别是什么呢?线性表的顺序存储结构:在逻辑上相原创 2010-08-18 14:19:00 · 755 阅读 · 0 评论 -
初始化单链表
#include typedef struct Node{ char name[20]; struct Node *next;}stud;/* * 初始化一个拥有n个结点的链表 */stud *InitList(int n){ //第一个结点(头结点)--->......--->第n个结点--->......--->最后一个结点 stud *head,*pf,*pb;原创 2011-07-06 15:50:44 · 1183 阅读 · 0 评论 -
字符串反转
// 指针首位对调void reverse(char *str){ char *src = str; int len = strlen(str); char *dest = (char *)malloc(len+1); //要为\0分配一个空间 char *s = &src[len-1]; //指向原字符串的最后一个字符 char *d = dest; while(len--原创 2012-04-01 11:12:55 · 493 阅读 · 0 评论 -
快速排序
void quicksort(int a[], int left, int right){ int i, j, pivot; if(left < right) { i = left; j = right; pivot = a[i]; //取最左边第一个数作为pivot while(i < j) { while(i pivot) j--; //从右向左找第一个原创 2012-05-09 14:26:51 · 492 阅读 · 0 评论 -
移除字符串中多余的空格
#include int main(){ char str[]="Hello world welcome"; char *i; i = str; while(*i !='\0') { while(*i == ' ' && *i !='\0') i++; while(*i原创 2013-07-05 14:09:10 · 656 阅读 · 0 评论 -
数据结构的学习顺序
数据机构的前前后后原创 2010-08-10 11:48:00 · 1537 阅读 · 0 评论 -
数组实现队列(C语言版)
#include #define QUEUE_SIZE 50typedef struct SeqQueue{ int data[QUEUE_SIZE]; int front; int rear;}Queue;Queue *InitQueue(){ Queue *q = (Queue *)malloc(sizeof(Queue)); if(原创 2013-10-09 13:41:08 · 5002 阅读 · 1 评论 -
【二叉树】后续遍历二叉树
void PostTraversal(BTNode *root){ BTNode *cur = NULL; BTNode *pre = NULL; stack s; s.Push(root); while(!s.IsEmpty()) { cur = s.GetTop(); if((cur->lchild == NU原创 2013-10-30 21:17:26 · 759 阅读 · 0 评论