
数据结构
田园诗人之园
我是一位平凡的诗人,也是一位平凡的工程师。
展开
-
sprintf会在字符串末尾添加'\0'结束
#include <stdio.h> int sprintf(char *str, const char *format, ...);#include <string.h>#include <stdio.h>int main(){ char str[12]="Hello world"; int num = 0x12...原创 2019-09-05 09:55:34 · 10274 阅读 · 0 评论 -
数据结构-链栈的学习
链栈栈也可以采用链式存储结构实现,栈的链式存储结构简称为链栈。链栈实质上是一个规定只能在表头进行插入与删除操作的单链表。链栈具有链式存储结构的优点,例如,可以提高结点的插入和删除的效率,可以根据实际需要为每个栈分配相应的单元等。···typedef struct{elementype data; //节点数据域struct lnode *next; //节点指针域...原创 2019-08-08 10:12:08 · 532 阅读 · 0 评论 -
数据结构-队列(链式队列实现)
链式队列中结点的结构体定义:typedef struct qnode{ DataType data; struct qnode *next;}LQNode;为了方便参数调用,通常把链式队列的头指针front和队尾指针rear定义为下面的格式:typedef struct{ LQNode *front; LQNode *rear;}LQueue;链式队列操作的实现:(1),...原创 2019-08-05 17:14:51 · 644 阅读 · 0 评论 -
数据结构-队列
队列是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表的完全相同,其差别就是:线性表允许在任意位置插入和删除数据元素,而队列只允许在其一段进行插入操作,在另一端进行删除操作。队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头。队列是一种先进先出的线性表。假溢出:顺序队列因为多次入队列和出队列操作后出现的尚有存储空间但是不能进行队列操作的溢出称为假溢出。...原创 2019-08-04 11:40:20 · 377 阅读 · 0 评论 -
container_of
/**container_of - cast a member of a structure out to the containing structure@ptr: the pointer to the member.@type: the type of the container struct this is embedded in.@member: the name of the ...原创 2019-07-22 10:26:21 · 134 阅读 · 0 评论 -
程序内存分配的几种不同的属性
程序内存分配的几种不同的属性1、 栈区(stack)由编译器自动分配释放,用于存放函数的参数值,局部变量的值等;其操作方式类似数据结构中的栈。2、 堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,通常其对应数据结构中的链表操作。3、 全局区(静态区)(static)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的...原创 2019-07-19 11:01:49 · 352 阅读 · 0 评论 -
C语言优先级
C语言优先级| | ||–|--|转载 2019-06-04 10:37:40 · 3947 阅读 · 1 评论 -
实现两个数据交换的算法实现
1,用内存交换的方式写一个交换两个数据的宏#include &lt;string.h&gt;#define swap(a, b) \{ char tempBuff[10]; memcmp(tempBuff, &amp;a, sizeof(a)); memcpy(&amp;a, &amp;b, sizeof(b)); memcpy(&amp;b, tempBuff, sizeof(b原创 2018-10-07 21:07:02 · 1730 阅读 · 2 评论 -
二叉树的深度优先遍历以及广度优先遍历实现
深度遍历分为先序遍历,中序遍历,以及后序遍历;而深度遍历的方式又分为递归深度遍历和栈深度遍历。 广度优先遍历是层序遍历:#!/usr/bin/env python#coding:utf-8class TreeNode(object): def __init__(self): self.data = '#' self.lchild = None ...原创 2018-04-23 23:14:49 · 747 阅读 · 0 评论 -
二叉树-广度优先遍历
二叉树的广度优先遍历实现方式,即层序遍历#!/usr/bin/env python#coding:utf-8class TreeNode(object): def __init__(self): self.data = '#' self.lchild = None self.rchild = Noneclass Tree(Tre...原创 2018-04-23 23:11:48 · 295 阅读 · 0 评论 -
二叉树-深度优先遍历(栈遍历方式)
深度优先遍历分为先序遍历,中序遍历,以及后序遍历;而深度遍历的方式又分为递归深度遍历和栈深度遍历。我们现在讨论栈深度遍历的实现方式:#!/usr/bin/env python#coding:utf-8class TreeNode(object): def __init__(self): self.data = '#' self.lchild = N...原创 2018-04-23 23:08:54 · 2935 阅读 · 0 评论 -
二叉树-深度优先遍历(递归方式)
深度优先遍历分为先序遍历,中序遍历,以及后序遍历;而深度遍历的方式又分为递归深度遍历和栈深度遍历。我们现在讨论递归深度遍历的实现方式:#!/usr/bin/env python#coding:utf-8class TreeNode(object): def __init__(self): self.data = '#' self.lchild = ...原创 2018-04-23 23:05:22 · 789 阅读 · 0 评论 -
数据结构-栈的应用学习
数制的转换问题【问题描述】 要求编制一个程序实现下述功能:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。【算法思想】 十进制转换为八进制的方法是除8取余。这一计算过程是从低位到高位依次产生八进制数的各个数位;而打印输出时,应从高位到低位进行,恰好与计算过程相反。因此,可将计算过程中得到的八进制数的各位顺序进栈,则按出栈顺序打印的序列即为与输入十进制数对应的八进制数。具体算...原创 2019-08-08 14:14:15 · 667 阅读 · 0 评论 -
Brute-Force算法实现
typedef struct{ char *str; int maxLength; int length;}DString;//查找主串S从start始的子串T,成功则返回T在S中的首字符位置,失败则返回-1int BFIndex(DString S, int start, DString T){ int i = start, j = 0, v; while ((i <...原创 2019-08-06 15:03:04 · 1665 阅读 · 1 评论 -
dump the data of specific memory address
dump the data of specific addressdump as Bytevoid Dump_Specific_MemData(unsigned char *base, unsigned int len){ char str[3] = {0}; unsigned int offset = 0; while (offset < len) { sp...原创 2019-09-05 09:36:37 · 160 阅读 · 0 评论 -
数据结构-排序-选择排序
[选择排序的思想]每次从待排序的数据元素集合中选取关键字最小的数据元素放到数据元素集合的最前面,数据元素集合不断变小,当数据元素集合为空时,选择排序结束。void SelectSort(DataType a[], int n){ int i, j, min; DataType temp; for (i = 0; i < n-1; i++) { min = i; f...原创 2019-08-16 17:45:52 · 125 阅读 · 0 评论 -
数据结构-排序-插入排序实现
插入排序:[插入排序的基本思想]从初始有序的子集合开始,不断地把新的数据元素插入到已排序有序自己和的合适位置,使子集合中数据元素的个数不断增多,当子集等于集合时,插入排序算法结束,常用的插入排序有直接插入排序和希尔排序两种。直接插入排序[直接插入排序的基本思想]顺序地把待排序的数据元素按其关键词值的大小插入到已排序数据元素子集合的适当位置,子集合的数据元素个数从只有一个数据元素开始...原创 2019-08-16 17:05:34 · 447 阅读 · 0 评论 -
数据结构-排序
排序:排序是对数据元素序列建立某种有序排列的过程。排序分为内部排序和外部排序。内部排序:内部排序是把待排数据元素全部导入内存中进行的排序。外部排序:如果数据元素的数量太大,需要分批导入内存中。分批导入内存的数据元素排好后再分批导入到外部存储中的排序方法叫外部排序。...原创 2019-08-16 15:54:48 · 135 阅读 · 0 评论 -
数据结构-排序-快速排序的实现
快速排序采用的是分治策略,它是目前已知的排序速度最快的一种排序方法。 void Quick_Sort(DataType R[],int low,int high) { int i=low,j=high; DataType temp = a[low]; if...原创 2019-08-15 16:02:06 · 603 阅读 · 0 评论 -
数据结构-二叉树的操作实现学习
二叉树的操作实现(1),节点结构体定义:typedef struct Node{ DataType data; //数值域 struct Node *leftChild; //左子树指针 struct Node *rightChild; //右子树指针}BiTreeNode;(2),初始化void Initiate(BiTreeNode **root){ *root = ...原创 2019-08-14 15:30:53 · 230 阅读 · 0 评论 -
数据结构-二叉树的应用学习
二叉树的应用本节介绍二叉树的基本应用,包括求二叉树的叶结点数、总结点数、二叉树的深度等,重点介绍标识符树的应用。二叉树的基本应用1.统计二叉树叶子结点数(1)基本思想。若二叉树结点的左子树和右子树都为空,则该结点为叶子结点。可先对全局变量count+1,然后依次递归统计T的左子树叶子结点数和T的右子树叶子结点数。(2)具体算法如下。void Leafnum(BT *T) //求二叉树的...原创 2019-08-13 16:44:09 · 638 阅读 · 0 评论 -
数据结构-二叉树的转换
二叉树的转换如果对树或森林采用链表存储并设定一定的规则,就可以用二叉树结构表示树和森林。这样,对树的操作实现就可以借助二叉树存储,利用二叉树上的操作来实现。本节将讨论树和森林与二叉树之间的转换方法。6.4.1 树的存储结构在实际应用中,很多事物是不能直接用二叉树来描述的,而只能用树和森林来表示。1.双亲表示法双亲表示法是用一组连续的空间来存储树上的结点,同时在每个结点上附加一个指示器来指...原创 2019-08-13 16:37:50 · 809 阅读 · 0 评论 -
数据结构-线索二叉树
线索二叉树1.什么是线索二叉树遍历二叉树是按一定的规则将二叉树中所有结点排列为一个有序序列,这实质上是对一个非线性的数据结构进行线性化的操作。经过遍历的结点序列,除第一个结点和最后一个结点以外,其余每个结点都有且仅有一个直接前驱结点和一个直接后继结点。当以二叉链表作为存储结构时,只能找到结点的左、右孩子的信息,而不能直接得到结点任意一个序列中的直接前驱结点和直接后继结点是什么,这种信息只有在...原创 2019-08-13 16:30:31 · 1833 阅读 · 0 评论 -
数据结构-二叉树
在有序树中有一类最特殊,也是最重要的树,称为二叉树(binarytree)。二叉树是树结构中最简单的一种,但却有着十分广泛的应用。二叉树的定义1.定义二叉树是有n(n≥0)个结点的有限集合,它有如下一些特点。(1)该集合可以为空(n=0)。(2)该集合可以由一个根结点及两个不相交的子树组成非空树,这两个子树分别称为左子树和右子树。(3)左子树和右子树同样又都是二叉树。在一棵非空二叉...原创 2019-08-13 16:15:58 · 952 阅读 · 0 评论 -
数据结构-树的概念
6.1.1 树的定义1.树的定义树是n(n≥0)个有限数据元素的集合。在任意一棵非空树T中,有以下一些特点。(1)有且仅有一个特定的称为树根(root)的结点(根结点无前驱结点)。(2)当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的集合T1,T2,…,Tm。其中,每一个集合Ti(1≤i≤m)本身又是一棵树,并且称为根的子树。6.1.2 基本术语树的基本术语...原创 2019-08-13 16:07:35 · 488 阅读 · 0 评论 -
Makefile选择编译的用法
如果是两种情况选择要编译的文件时按下面的方式处理:ifeq (...A...)......else......#endif如果是三种以及以上情况下需要按照下面的方式处理:ifeq (...A...).......else ifeq (...B...).......else........#endif...原创 2018-04-18 21:54:58 · 2651 阅读 · 0 评论 -
条件编译的用法
选择条件编译我们常用的用法如下所示:ifdef A…else….endif但是如果有三种以及三种以上情况下该如何处理呢,这个时候需要使用下面的方式处理:ifdef A…elif defind B…else…endif...原创 2018-04-18 21:49:10 · 1089 阅读 · 1 评论 -
Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same ...原创 2018-04-22 13:22:25 · 149 阅读 · 0 评论 -
学生成绩判断函数接口
#define ret_ok 1#define ret_err 1int judge_score(int score,char *ch){ if(score > 100 || score < 0) { printf("The score you input should little than 100 and bigger than 0\n");原创 2015-08-08 08:44:37 · 652 阅读 · 0 评论 -
简单理解动态内存分配和静态内存分配的区别
在涉及到内存分配时,我们一般都要考虑到两种内存分配方式,一种是动态内存分配,另一种是静态内存分配,我们该怎么理解这两者的区别呢?在我看来,静态内存分配和动态内存分配比较典型的例子就是数组和链表,数组的长度是预先定义好的,在整个程序中是固定不变的,所以他在内存分配时是以静态内存分配的方式进行的。而链表,它的信息有可能会随时更改,内存的分配取决于我们实际输入的数据,这样就用到了动态内存分配的方式。原创 2015-06-22 13:38:22 · 5410 阅读 · 0 评论 -
递归函数的经典例子(汉诺塔问题)
#includevoid HN(int n,char a,char b,char c);int main(int argc,char *argv[]){ int Dish_num; printf("Please Input the Dish num: "); scanf("%d",&Dish_num); while(Dish_num != 0){ printf(原创 2015-06-22 13:36:37 · 2363 阅读 · 0 评论 -
判断回文,位与,位或
//判断字符串是否是回文?int fun(char *sre){char *s1,*s2;s1 = str;s2=str+strlen(str)-1;if(strlen(str)%2 != 0){return 0;}while(s1{if(*s1==*s2){s1++;s2--;原创 2015-06-22 13:31:16 · 751 阅读 · 0 评论 -
关于网络套接字缓存区结构体sk_buff的解析
这是对于网络套接字缓冲区数据结构sk_buff的解释,尤其是英文蓝色部分是官方给出的解释;原创 2015-03-22 22:17:06 · 1464 阅读 · 0 评论 -
关于面试的一个问题的解决
这是我今天面试的时候问的一个问题,个人感觉比较有价值,是关于求结构体地址的解决方式。原创 2014-11-07 21:42:50 · 835 阅读 · 0 评论 -
数据结构-线性表--单链表
这是学习数据结构--线性表--链式存储结构的总结,留待以后学习复习使用,但让若是别人看了有帮助就更好了。原创 2014-11-13 17:32:46 · 883 阅读 · 0 评论 -
面试总结---chat room的UDP聊天室软件
这是今天面试的时候遇到的问题,当时由于长时间未接触网络,所以也没有写出来,现在贴出来让自己以后学习使用,并且给有需要的人看看原创 2014-11-12 22:05:59 · 1313 阅读 · 0 评论 -
面试总结---TCP实现的chat_room程序
今天面试的时候遇到一面试官问我socket实现的聊天室软件,这个是TCP实现的聊天室程序。原创 2014-11-12 22:41:42 · 1027 阅读 · 0 评论 -
数据结构-线性表-顺序表
这是关于数据结构-线性表部分的顺序表的有关主要内容,在此留作自己以后的复习使用原创 2014-11-10 16:50:28 · 769 阅读 · 0 评论 -
数据结构-绪论
这是我学习数据结构的绪论部分对于关键知识点的总结,大家可以一起看看,交流一下。原创 2014-11-09 21:32:12 · 948 阅读 · 1 评论 -
判断一年中某一天是这一年的第几天的函数接口
int a[] = {31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31};int judge_day(int Year, int Month, int Day, int *result_day){ int Total = 0; int i = 0; if( (((Year%400) == 0) || ((Year%4) == 0))原创 2015-08-10 22:22:46 · 1251 阅读 · 0 评论