![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构(c语言)
Bill_heyg
这个作者很懒,什么都没留下…
展开
-
引用3
#include using namespace std; int b = 2; void Func3(int* const &p) { *p = 4; //p = &b; // 去掉这个注释的话会编译错误 } int main() { int a = 1; int* p原创 2013-05-15 17:08:51 · 453 阅读 · 0 评论 -
C语言 条件编译详解
本文出处:http://blog.csdn.net/21aspnet/article/details/6737612 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。 在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管转载 2013-07-09 18:53:35 · 609 阅读 · 0 评论 -
指针与数组(数组名)---浅析
看到指针需要有几个概念: 1、其是个变量----------------------目的是要和常量区分开(常量诸如:地址) 2、本身类型是什么类型,指向对象是什么类型 看到指针有上面的概念,就能立足推理了: -------------------------------------------------一维数组-----------------------------------原创 2013-07-09 20:34:28 · 619 阅读 · 0 评论 -
c中存储类型,以及调用内存分配函数----细致讲解
C语言中有4中存储类型: Auto:内存在栈区和堆区(调用函数),可读,可写 Static:存放在数据段区,可读可写 Register:内存在寄存器区 全局变量:存放在数据段区,可读可写 Auto类型的存储类型变量,主要用在: 1、函数内部,普通变量 2、函数形参列表,变量普通 3、函数内部,块作用区 注意:auto变量时在程序执行的时候分配内存,但是对于数组: Int a原创 2013-07-09 17:52:02 · 831 阅读 · 0 评论 -
makefile编写粗略(部分)解读
Make工程管理器 定义:“自动编译管理器”,这里的’自动’是值它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。 编写makefile时创建和使用变量,其定义变量的两种方式: 递归展开方式VAR=VM 简单方式VAR:=VM 递归方式可以有下面的用法: OBJ=VAR VAR=VM VM=main.c原创 2013-07-09 19:15:35 · 574 阅读 · 0 评论 -
“位域”与结构体内部对齐、结构体外部对齐(自己定义的)
位域:信息存储时不需要一个完整的字节,只需要几位,就足以完成数据的存储,c语言中提供这种数据结构“位域”或“位段”。 空域:当我们想上下一个数据,从下一个字节开始存储时,空域用于填充当前空余的空间(这里很特殊;如果用到空域,那么就会有:当前变量类型空间 = 当前变量占用位 + 0余下位) -----------------------------“位域”结构体---------------原创 2013-10-24 16:01:34 · 1049 阅读 · 0 评论 -
查找的几种简单算法
减少时间复杂度的方法:尽量减少比对,以减少时间复杂度 1、顺序查找: 时间浪费在比对上: 2、折半查找: 要求:(1) 顺序表 (2) 关键字是有序的 3、分块查找: 分块为n个块(块之间是有序的(升或降),块内部可以无序) 算法:(1)查找到对应的块 (2)然后再块内查找(顺序查找等) 4、Hash查找: hash表的思想:一个数组,每个数组成员后面又是一个链原创 2013-10-25 11:33:32 · 653 阅读 · 0 评论 -
排序之直接插入排序
算法准备: (1) p[0] 用于监控哨 (2)数据从p[1]开始存放 算法思想: (1) 从i=2的结点开始:先将p[i]分别存放于监视哨p[0],然后分别与j=i-1开始与监视哨比较: 对于升序:若p[0]=p[j]的位置(在寻找这个位置的过程中,p[j+1]=p[j]),然后插入:p[j+1] = p[0]; 对于降序:若p[0]>p[j],j--,直到找到p[0] /原创 2013-10-25 12:37:47 · 492 阅读 · 0 评论 -
折半查找(二分查找)——简单说明
折半查找要求: 1、必须采用顺序存储 2、关键字是有序的排列 算法复杂度o(log(n)) 核心代码: ///该函数返回查找的关键字data在顺序表中的下标,若返回值为-1则表示没有查找到对应的关键字 4 int zhe_ban(int *p, int data, int len) 5 { 6 int higt=len-1,low=0,i=0,mid;原创 2013-10-25 11:05:13 · 712 阅读 · 0 评论 -
二叉树创建以及遍历(j简单创建、遍历、叶子计数、深度计数、销毁)之1
//binary.h 1 #ifndef __BINARY_H__ 2 #define __BINARY_H__ 3 4 #include 5 #include 6 #include 7 8 #define OK 1 9 #define ERROR 0 10 #define OVERFLOW -2 11 12 typ原创 2013-10-20 19:45:15 · 716 阅读 · 0 评论 -
几种简单的排序算法
1、插入排序: 直接插入排序; 折半插入排序: //参考我写的代码博文 2、交换排序: “起泡”排序: 快速排序:原创 2013-10-26 13:13:32 · 666 阅读 · 0 评论 -
排序之快速排序
参考:http://hi.baidu.com/thinkingidea/item/91aa7a0939e45637a3332ae0 17 void quicksort(int arrary[],int low, int high) 18 { 19 int i = low, j = high, pivot = arrary[low]; 20 21 if (lo转载 2013-10-26 18:36:16 · 547 阅读 · 0 评论 -
排序算法之折半插入算法
同直接插入排序法一样,借用p[0]为监视哨; 算法思路: 开始从i=2开始,在每一个i对应的p[I]下,都需要找到我们要插入的位置low,找到插入位置low后,我们就将需要后移的元素后移,之后在完成p[i]按照升序或者降序插入 核心代码如下: 26 void zhe_ban(int *p, int len1) 27 { 28 int i,j,low,hig原创 2013-10-25 17:59:59 · 618 阅读 · 0 评论 -
链表操作之链表反转
本文参考了:http://blog.csdn.net/heyabo/article/details/7610732 7 typedef struct Node { 8 int data; 9 struct Node *next; 10 }man,*MAN; /***链表反转**/ 法一: 思路: 1、先不考虑将头结点后移的问题,首先将所有的结点转载 2013-10-26 12:59:08 · 751 阅读 · 0 评论 -
指针之二详述
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4转载 2013-07-08 17:45:48 · 512 阅读 · 0 评论 -
串
/////////////////串用数组表示的基本操作--------S[0]存放字符串中的字符个数,字符串的起始地址是S+1____谨记///////////////// #include #include"stdlib.h" #include #define MASIZED 255 #define ERROR 0 typedef unsigned char SString[MAS原创 2013-05-15 17:03:49 · 526 阅读 · 0 评论 -
线性表顺序表
#include #include #include //#include //#include typedef int Stuts; typedef int Elemt; #define LIST_INIT_SIZE 100 #define sizenu 10 #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef原创 2013-05-15 16:47:24 · 580 阅读 · 0 评论 -
链队列
//链队列 #include #include #include #define OVERFLOW 0 #define OK 1 #define ERROR 0 typedef int Elemt; //链队列结点 typedef struct QNode{ int data; struct QNode * next; }QNode,*QueuePtr; //原创 2013-05-15 16:54:01 · 558 阅读 · 0 评论 -
栈应用之一数制转换
#include //#include #include #define STACK_INIT_SIZE 100 #define STACKINCREAMENT 10 #define ERROR 0 #define OK 1 typedef int Elemt; typedef struct { int *base; int *top; int stacksize;原创 2013-05-15 16:57:27 · 560 阅读 · 0 评论 -
引用2
#include using namespace std; void Func1(int* p); void Func2(int*& p); int b = 2; int main() { int a = 1; int* p = &a; cout cout Func1(p);原创 2013-05-15 17:08:13 · 521 阅读 · 0 评论 -
循环队列
//循环队列之队列的顺序表示和实现 #include #include #define OK 1 #define ERROR 0 #define MASIZE 100 typedef int Elemt; typedef struct{ int * base; int front; int rear; }CQueue; //创建一个空的循环列表 Elemt crea原创 2013-05-15 16:55:06 · 782 阅读 · 0 评论 -
栈
#include //#include #include #define STACK_INIT_SIZE 100 #define STACKINCREAMENT 10 #define ERROR 0 #define OK 1 typedef int Elemt; typedef struct { int *base; int *top; int stacksize;原创 2013-05-15 16:55:58 · 509 阅读 · 0 评论 -
栈应用之二行编辑
#include //#include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREAMENT 10 #define ERROR 0 #define OK 1 //#define EOF q typedef int Elemt; typedef struct { char *bas原创 2013-05-15 16:59:07 · 539 阅读 · 0 评论 -
栈应用之三递归(之一n的阶剰)
#include //递归实现n的阶乘 long fact(long n){ if(n == 0) return 1; return (n*fact(n-1)); } int main(){ int n; long m; printf("input your n:\n"); scanf("%d",&n); m=fact(n); printf("the原创 2013-05-15 17:00:55 · 536 阅读 · 0 评论 -
栈应用之三递归(之二数列求和)
#include //fibonacci数列求和 long fib(long n){ if(n==0) return 0; if(n==1) return 1; return (fib(n-1)+fib(n-2)); } int main(){ long n; printf("input your n:"); scanf("%ld",&n); printf("the a原创 2013-05-15 17:02:07 · 615 阅读 · 0 评论 -
指针1
#include using namespace std; int main() { void swap(int* p1, int* p2); int* pointer_1, *pointer_2, a, b; cin>>a>>b; pointer_1 = &a; pointer_2 = &b;原创 2013-05-15 17:06:39 · 656 阅读 · 0 评论 -
引用
#include using namespace std; int b = 2; void Func3(const int*& p) { //*p = 4; // 去掉这个注释的话会编译错误 p = &b; cout } int main() { int a = 1;原创 2013-05-15 17:07:29 · 506 阅读 · 0 评论 -
线性表的单链表
#include #include typedef int Elemt; typedef struct LNode{ Elemt data; struct LNode *next; }LNode,*Linklist; #define ERROR 0 #define OK 1 //创建一个空的结点,并将其放到链表的中(依次,这里的入口结点为要插入位置的前一个结点///原创 2013-05-15 16:49:00 · 566 阅读 · 0 评论 -
双向循环链表
#include #include #define ERROR 0 #define OK 1 #define OVERFLOW -1 typedef int Elemt; typedef struct DULNODE{ Elemt data; struct DULNODE *pre;//指向前驱 struct DULNODE *next;//指向后继 }DULNDOE,*DUL原创 2013-05-15 16:52:41 · 572 阅读 · 0 评论 -
可重入函数(简单解析,仅供参考)
概念: 可重入函数:一个函数,被多个任务同时调用时,不用担心数据会发生错误的函数-------------------------该定义是我自己定义的仅供参考 概念解析: 满足上面的概念的情况有下面几种(对于linux而言): 1、除了使用自己栈上的变量以外不依赖其他的static环境资源 2、若一定要使用全局变量,一定要试试保护手段,如:加锁,信号量等多种方式 主要:可重入在并原创 2013-10-24 08:30:43 · 827 阅读 · 0 评论