摘要:最重要的二叉树来了.#include <stdio.h>#define STACK_MAX_SIZE 30#define QUEUE_MAX_SIZE 30#ifndef elemType typedef char elemType;#endifstruct BTreeNode{ elemType data; struct BTreeNode *left; struct BTreeNode *right;};/* 1.初始化二叉树*/void initBTree(struct BTreeNode **bt){ *bt = NULL; return; }...
        
阅读全文
 
            
                
                
摘要:#include <stdio.h>/* 最大公约数和最小公倍数 算法 ***************************** 欧几里德算法: 其方法是用较大的数除以较小的数,上面较小的除数和得出的余数构成新的一对数, 继续做上面的除法,直到出现能够整除的两个数,其中较小的数(即除数)就是最大公约数。 大数 = 公约数 * x = 公约数 * (y + z); 小树 = 公约数 * y; 大数 % 小数 = 公约数 * z; 小数 % 公约数 * z = 公约数 * (y%z); ...
        
阅读全文
 
            
                
                
摘要:最小数在根节点,一层比一层大的二叉树.#include <stdio.h>typedef int elemType;struct heap{ elemType *heap; int len; int maxsize;};/* 1.c初始化堆*/void initHeap(struct heap *hbt, int ms){ if(ms < 0) { printf("数组长度参数非法.\n"); system("pause"); } hbt->heap = malloc(sizeof(elemType)); ...
        
阅读全文
 
            
                
                
摘要:#include <stdio.h>struct node{ char ch; struct node *next;};/* 1.初始化单链表*/void init(struct Node **h){ *h = (struct node *)mallov(sizeof(struct node)); if(*h == NULL) { printf("空间申请失败...\n"); system("pause"); } (*h)->next = NULL: return; }/* 2.将x节点插入到链表后*/...
        
阅读全文
 
            
                
                
摘要:队列一般叫优先级队列.这是跟它的相关应用有关的.#include <stdio.h>#include <stdlib.h> typedef int elemType;struct sNode{ /*队列节点*/ elemType data; struct sNode *next;};struct queueLK{ struct sNode *front; /*队列头指针*/ struct sNode *rear; /*队列尾指针*/};/* 1.初始化链队*/void initQueue(struct queueLK *hq)...
        
阅读全文
 
            
                
                
摘要:这是百度面试一道算法题.当时没答上来,主要是思考方式不对.想算法问题的时候一定要按照电脑的逻辑来,不能按照人脑的逻辑顺序来.(主要还是程序练得不够)举个例子:a+b 的逆波兰式为ab+, 这很简单,但是在思考的时候不要先想把+号拿出来,放到后面,要思考,从左到右电脑如何处理才能得出ab+.这样才能写出程序算法.而不是人脑算法.当时的题目是这样的.人民币有 1元 2元 5元 10元 20元 50 元 100元 这几种币值.问:给定200元,求出有多少种币值组合方式. 币种可重复,比如,200张1元的算一种方式.题目很简单,做起来难.程序逻辑就是int a[] = { a1, a2, a3, a4
        
阅读全文
 
            
                
                
摘要:/****************************************************************************************************************逆波兰式的作用: 对于实现逆波兰式算法,难度并不大,但为什么要将看似简单的中序表达式转换为复杂的逆波兰式? 原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中序表达式是非常复杂的结构。 相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序。如:我们平时写a+b,这是中缀表达式,写成后缀表达...
        
阅读全文
 
            
                
                
摘要:这个算法题以前百度面试的时候考过,今天在复习的时候又看到了.就是通过压栈出栈的方式进行匹配的.#include <stdio.h>#include "栈的链式存储.c"/* 遍历整个栈,从底到顶*/void travelStack(struct sNode *hs){ struct sNode *temp = hs; char arr[100]; /*栈的从底到上遍历是个问题,用数组就会固定大小,也许用指针会好些,满了就再realloc一下*/ int i,n =0; while(temp != NULL) { ...
        
阅读全文
 
            
                
                
摘要:栈的链式存储跟线性表的链式存储一样,只是添加删除数据的方式不同。编译器:GCC#include <stdio.h>typedef int elemType;struct sNode{ elemType data; struct sNode *next;};/* 1.初始化栈为空*/void initStack(struct sNode **hs){ *hs = NULL; return;} /* 2.向链中插入一个元素(入栈) */void push(struct sNode **hs, elemType x){ struct sNode *temp; te...
        
阅读全文
 
            
                
                
摘要:栈就是后进先出,从代码实现来看跟线性表是一样的,只是进出数据的方式不同。如果要进行复杂操作,内部用线性表的操作方式就可以。编译器:GCC#include <stdio.h>typedef int elemType;struct stack{ elemType *stack; /*存储栈元素的数组指针*/ int top; /*存储栈顶元素的下标位置*/ int maxsize; /*存储stack数组的长度*/}; /* 1.初始化栈s为空*/void initStack(struct stack *s,int ms){ s->...
        
阅读全文
 
            
                
                
摘要:跟线性存储一样,我添加了17,18两个函数.不过感觉17不够好,用到了goto.编译器:gcc#include <stdio.h>typedef int elemType;struct sNode{ elemType data; struct sNode *next; };/* 1.初始化线性表,即置线性表的头指针为空 */void initList(struct sNode **hp) { *hp = NULL; return; } /* 2.清楚线性表L中所有元素,即释放单链表L中所有节点,使之成为一个空表 */ void clearLi...
        
阅读全文
 
            
                
                
摘要:最近准备换工作,去了几个面试。不知道是我去的公司都比较好还是怎么着。都考了数据结构与算法方面的问题。这东西我刚学的时候会,自打工作以后就没用过。数据结构与算法真的是在我的编程中很少用到,应该是我没干过开发的缘故吧。我干的hadoop又用不到这些。所以面试的时候被问住了。每次面试前都要重新看,每次都是这样。面试完以后很郁闷,我工作了1年多了,不会数据结构和算法也照样能搞hadoop啊,照样完成工作啊。后来想想,这是编程的基础,一定程度上体现程序员的编程水平。所以决定重新再温习一下数据结构与算法,印象中是第3次了。这次复习完,记一辈子,再也不回头看了!!因为基础的就那么些东西,链表,二叉树,堆栈,
        
阅读全文
 
            
                
                
摘要:前16个是根据网上资料写的。17,18方法是我自己添加的。稍微有点逻辑的也就17,18.一共18个方法基本全部包含了所有线性表的操作。编译器为GCC,支持所有ANSI C标准。#include <stdio.h>typedef int elemType;struct List{ elemType *list; int size; int maxsize;};/* 1.初始化线性表。*/ int initList(struct List *L,int ms){ elemType *p = (elemType *)malloc(ms * sizeof(elemType)); ...
        
阅读全文