数据结构
傻红就是不爱跑步
这个作者很懒,什么都没留下…
展开
-
约瑟夫问题
题目:n个人(编号1~n),从k开始报数,报到m的退出,剩下的人继续从1开始报数。 代码如下:#include <stdio.h>#include <stdlib.h>typedef struct node{ int data; struct node *next;}Linklist;void Josephus(int n,int m,int k){ Linklist原创 2016-03-29 14:50:54 · 267 阅读 · 0 评论 -
算法思想
转载自http://blog.sina.com.cn/s/blog_692c05d20100jwjz.htmlTaken from "Introduction to The Design and Analysis of Algorithms" by Anany Levitin节选自《算法设计与分析基础》潘彦 译蛮力法就像宝剑不是撬棍一样,科学也很少使用蛮力。转载 2016-06-13 10:48:11 · 1140 阅读 · 0 评论 -
广度优先生成树
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct{ int data[MAXSIZE]; int rear; int front;}SeqQueue;typedef struct node{ int adjvex; struct node * next;}Node原创 2016-06-07 11:19:50 · 2023 阅读 · 0 评论 -
深度优先生成树
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{ int adjvex; struct node * next;}Node;typedef struct{ int vertex; Node * first;}VNode;int visited[MAXSIZE]原创 2016-06-07 10:13:26 · 2478 阅读 · 0 评论 -
哈夫曼编码
#include <stdio.h>#define MAXSIZE 30#define MAXBIT 10typedef struct{ int weight; int lchild; int rchild; int parent;}HNode;typedef struct{ int weight; //保存每个叶子节点的权重原创 2016-05-23 17:05:39 · 346 阅读 · 0 评论 -
线索二叉树
#include <stdio.h>#include <stdlib.h>typedef struct node{ char data; struct node * lchild; struct node * rchild; int ltag; int rtag;}TBTree;TBTree * pre;//创建一颗二叉树TBTree * create(原创 2016-05-23 11:12:48 · 309 阅读 · 0 评论 -
图的广度优先搜索(采用邻接表存储方式)
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20int visited[MAXSIZE];typedef struct node{ int adjvex; struct node * next;}Node;typedef struct{ int vertex; Node * first;}VNode原创 2016-06-01 20:10:47 · 1026 阅读 · 0 评论 -
链队列的基本操作
#include <stdio.h>#include <stdlib.h>typedef struct node{ char data; struct node * next;}Qnode;typedef struct{ Qnode * front; Qnode * rear;}LinkQueue;LinkQueue * init(){ LinkQueu原创 2016-04-24 22:10:10 · 307 阅读 · 0 评论 -
循环队列的基本操作
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct{ char data[MAXSIZE]; int rear; int front;}SeqQueue;SeqQueue * init(){ SeqQueue * sq; sq = (SeqQueue *)malloc原创 2016-04-24 22:09:08 · 427 阅读 · 0 评论 -
五大常用的算法
转自:http://www.cnblogs.com/steven_oyj/category/246990.html五大常用算法之一:分治算法分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,转载 2016-06-13 14:51:26 · 740 阅读 · 0 评论 -
选美比赛
在选美大奖赛的半决胜赛现场,有一批选手参加比赛,比赛的规则是最后得分越高,名次越低。当半决决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如 选手序号: 1,2,3,4,5,6,7,选手得分: 5,3,4,7,3,5,6,则输出名次为: 3,1,2,5,1,3,4,请编程帮助大奖赛组委会完成半决赛的评分和原创 2016-06-13 15:46:51 · 411 阅读 · 0 评论 -
查找(3)——二叉排序树的建立、结点的查找和删除
#include <stdio.h>#include <stdlib.h>typedef struct node{ int data; node * lchild; node * rchild;}BTree;void createBTree(BTree * root,int x){ //建立二叉排序树 BTree * q, * p; q = r原创 2016-06-16 10:15:33 · 2180 阅读 · 0 评论 -
查找(2)——哈希查找
#include <stdio.h>#define MAXSIZE 11#define key 11void insert(int hashArray[],int x){ int i = 0; int t = x % key; while(i < MAXSIZE){ if(hashArray[t] <= -1){ hashArray原创 2016-08-21 09:42:38 · 505 阅读 · 0 评论 -
C语言文件操作函数大全
C语言文件操作函数大全clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf转载 2016-08-19 11:50:44 · 444 阅读 · 0 评论 -
各种排序算法的总结和比较
1 快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。(4) 对两边利用递归排序数列。快速排序比大部分排序算法转载 2016-07-20 09:17:45 · 383 阅读 · 0 评论 -
一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连在一起, 给出一个age, 在 链表中删除学生年龄等于age的学生信息。
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 10typedef struct stu{ char name[MAXSIZE]; int num; char sex[2]; int age; struct stu * next;}StuInfo;StuIn原创 2016-07-01 10:01:43 · 3033 阅读 · 0 评论 -
交换左右子树
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{ char data; node * lchild; node * rchild;}BTree;typedef struct{ BTree * data[MAXSIZE]; int rear; in原创 2016-07-01 09:58:14 · 1169 阅读 · 0 评论 -
排序(1)
1、直接插入排序#include <stdio.h>#define MAXSIZE 20typedef struct{ int key; int others;}RecordType;void sort(RecordType array[],int n){ int j = 0; for(int i=2;i<n;i++){ if(array[i].k原创 2016-07-01 09:55:56 · 323 阅读 · 0 评论 -
查找(1)
1、顺序查找#include <stdio.h>#define MAXSIZE 20typedef struct{ int key; int otherData;}SeqList;int search(SeqList sl[],int n,int x){ for(int i=0;i<n;i++){ if(sl[i].key == x){原创 2016-06-14 09:29:47 · 266 阅读 · 0 评论 -
链栈的基本操作
#include <stdio.h>#include <stdlib.h>typedef struct node{ char data; node * next;}LStack;LStack * init(){ LStack * ls; ls = (LStack *)malloc(sizeof(LStack)); ls->next = NULL;原创 2016-04-24 22:07:47 · 284 阅读 · 0 评论 -
将非递减的A表和B表合并为C表,且C表也是非递减的
第一种:顺序表#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct{ int data[MAXSIZE]; int len;}SqList;SqList * initSqList(){ SqList * L; L = (SqList *)malloc(sizeof(SqList原创 2016-05-09 10:50:48 · 881 阅读 · 0 评论 -
双向链表的基本操作
#include <stdio.h>#include <stdlib.h>struct DLinklist{ char data; struct DLinklist *prior,*next;};DLinklist * createDL(){ DLinklist * head,*p; char x; head = (DLinklist *)malloc(s原创 2016-03-29 10:56:49 · 213 阅读 · 0 评论 -
单链表的基本操作
#include <stdio.h>#include <stdlib.h>struct Linklist{ char data; struct Linklist * next;};Linklist * createLinklist(){ Linklist * head,* p; char x; head = (Linklist *)malloc(size原创 2016-03-28 19:47:11 · 305 阅读 · 0 评论 -
顺序表的基本操作(new)
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20struct SeqList{ int data[MAXSIZE]; int len;};SeqList * initSeqlist(){ SeqList * L; L = (SeqList *)malloc(sizeof(SeqList)); L原创 2016-03-28 19:44:39 · 580 阅读 · 0 评论 -
二叉树的基本操作(非递归)
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{ char data; node * lchild; node * rchild;}BTree;typedef struct{ BTree * data[MAXSIZE]; int top;}SeqSta原创 2016-04-26 15:18:18 · 366 阅读 · 0 评论 -
二叉树的基本操作(递归)
#include <stdio.h>#include <stdlib.h>typedef struct node{ char data; node * lchild; node * rchild;}BTree;BTree * create(BTree * p){ char ch; scanf("%c",&ch); if(ch != ' '){原创 2016-04-26 09:16:18 · 311 阅读 · 0 评论 -
顺序表的基本操作
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20struct SeqList{ int data[MAXSIZE]; int len;};SeqList * initSeqList(){ SeqList * L; L = (SeqList*)malloc(sizeof(SeqList)); L-原创 2016-03-22 21:59:37 · 422 阅读 · 0 评论 -
顺序栈的基本操作
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20struct SeqStack{ char data[MAXSIZE]; int top;};SeqStack * initSeqStack(){ SeqStack * s; s = (SeqStack *)malloc(sizeof(SeqStack)原创 2016-03-31 22:23:11 · 295 阅读 · 0 评论 -
去除单链表中的重复元素
#include <stdio.h>#include <stdlib.h>struct Linklist{ char data; struct Linklist * next;};Linklist * createLinklist(){ Linklist * head,* p,* q; char x; head = (Linklist *)malloc(s原创 2016-03-29 15:34:22 · 351 阅读 · 0 评论 -
按层次遍历二叉树
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{ char data; struct node * lchild; struct node * rchild;}BTree;typedef struct{ BTree * data[MAXSIZE]; in原创 2016-04-27 11:33:58 · 345 阅读 · 0 评论 -
检查一个算术表达式中的括号是否匹配
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 20typedef struct{ char data[MAXSIZE]; int top;}SeqStack;SeqStack * initSeqStack(){ SeqStack * s = (SeqStack *)mal原创 2016-05-10 15:05:17 · 3343 阅读 · 0 评论 -
图的深度优先搜索(采用邻接表存储方式)
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20int visited[MAXSIZE];typedef struct node{ int adjvex; struct node * next;}Node;typedef struct{ int vertex; Node * first;}VNode原创 2016-05-31 11:01:56 · 1408 阅读 · 0 评论 -
二叉树遍历的应用
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{ char data; node * lchild; node * rchild;}BTree;typedef struct{ BTree * data[MAXSIZE]; int top;}SeqSta原创 2016-05-17 17:37:11 · 371 阅读 · 0 评论 -
无向图的邻接矩阵
1、图是一种复杂的数据结构,表现在不仅各顶点的度可以不同,而且顶点之间的关系也错综复杂。从图的定义可知一个图的信息包括两个部分:图中顶点的信息和描述顶点之间关系——边或弧的信息。因此无论采取什么方法来建立图的存储结构,都要完整、准确地反映这两部分的信息。 2、用邻接矩阵存储图,很容易确定图中任意两个顶点之间是否相连。但是,要确定图中具体有多少条边,则必须按行、按列对每个元素进行查找后方能确定,因此原创 2016-05-30 11:28:30 · 4070 阅读 · 0 评论 -
由二叉树的遍历序列恢复二叉树
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 30typedef struct node{ char data; node * lchild; node * rchild;}BTree;char pred[MAXSIZE],ind[MAXSIZE];int i=0,j=0;BTree * create(BTr原创 2016-05-16 16:49:29 · 989 阅读 · 2 评论 -
二叉树的基本操作(非递归)(修改)
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{ char data; node * lchild; node * rchild;}BTree;typedef struct{ BTree * data[MAXSIZE]; int top;}SeqSta原创 2016-05-16 10:45:27 · 412 阅读 · 0 评论 -
用两个栈实现一个队列的功能
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20struct SeqStack{ char data[MAXSIZE]; int top;};SeqStack * initSeqStack(){ SeqStack * s; s = (SeqStack *)malloc(sizeof(SeqStack)原创 2016-05-13 09:51:53 · 383 阅读 · 0 评论 -
求两个集合的交集、差集和并集
#include <stdio.h>#include <stdlib.h>typedef struct node{ char data; struct node * next;}Linklist;//尾插入法Linklist * createLinklist2(){ char x; Linklist * head,* p,* q; head = (Lin原创 2016-05-25 16:05:29 · 5901 阅读 · 0 评论 -
递归
1、楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,共有多少种不同的走法?分析:设n阶台阶的走法数为f(n)。 如果有1个台阶,走法有1种,即f(1)=1; 如果有2个台阶,走法有2种(一种是上1阶,再上1阶,另一种是一步上2阶),即f(2)=2; 当n>3时:最后是一步上1个台阶的话,之前上了n-1个台阶,走法为f(n-1)种,而最后是一步上2个台阶的话,之前上了n-2个台阶,走法为f原创 2016-05-11 16:29:58 · 247 阅读 · 0 评论 -
判断给定的字符串是否是回文数(用栈实现)
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 20struct SeqStack{ char data[MAXSIZE]; int top;};SeqStack * initSeqStack(){ SeqStack * s; s = (SeqStack *)mal原创 2016-05-11 15:45:56 · 2906 阅读 · 0 评论