![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
rics_dn
这个作者很懒,什么都没留下…
展开
-
栈的使用之计算表达式的值
栈的一个重用应用时计算表达式的值,一般的处理方式是分两步:中缀表达式转后缀表达式;计算后缀表达式的值。我们把平时所用的标准四则运算表达式,即“9+(3-1)*3+5/2”叫做中缀表达式。因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化。1.遇到操作数:直接输出(添加到后缀表达式中) 2.栈为空时,遇到运算符,直接入栈 3.遇到左括号:将其入栈 4.遇到右括号:执原创 2015-08-25 14:27:55 · 286 阅读 · 0 评论 -
队列小记之一
队列,也叫FIFO(First In First Out),先进先出的线性结构,随着参加工作,见到了各种各样的队列,作为环形缓冲区的,栈上分配内存的,堆上分配内存的,写点东西(也没准是一系列的博客)记录一下。我最早写出的队列大概是这样:#include <string.h>#define SIZE 100struct Fifo { int front; int rear; i原创 2015-07-16 15:00:10 · 243 阅读 · 0 评论 -
队列小记三之链式存储
线性表的存储方式有顺序存储和链式存储,前两篇均是队列顺序存储的例子,以下是链式存储的代码:#include <string.h>#include <malloc/malloc.h>struct Node { int data; struct Node *next;};struct Fifo { struct Node *front; struct Node *re原创 2015-07-20 17:01:44 · 219 阅读 · 0 评论 -
队列小记四之队列的另一种实现
上一篇是队列的链式存储,以下是另外一种链式存储的时候,使用了几个c++语言的关键字,代码如下:struct Fifo { int front; int rear; int **tab; int size;};//初始化队列void init(struct Fifo * fifo, int size) { fifo->size = size; fif原创 2015-07-21 17:52:20 · 289 阅读 · 0 评论 -
队列小记二之环形结构
接上文,线性结构的一种提高内存使用效率的办法是使用环形结构,为了解决front与rear重合的判定问题,以下代码使用空出一个element的方式,为了使用方便,element使用整形;#define SIZE 100struct Fifo { int front; int rear; int data[SIZE];};//初始化队列void init(struct Fi原创 2015-07-17 10:24:41 · 362 阅读 · 0 评论 -
还是快速排序
使用三数中指法可以进一步提升快速排序的效率,实现如下:int median3(int *arr, int left, int right){ int center = (left + right) / 2; if (arr[left] > arr[center]) { swap(arr[left], arr[center]); } if (arr[left] >原创 2015-09-09 17:42:53 · 216 阅读 · 0 评论 -
快速排序简单实现
快速排序基本算法由四步组成: 1.如果集合S中元素个数为0或1,直接返回; 2.取S中一个任一个元素v,称之为枢纽元pivot 3.把S中剩余元素分成两个不相交的集合S1, S2 4.qsort(S1)后,qsort(S2)取第一个元素为pivot,代码实现如下:void qsort(int *arr, int left, int right){ if (left > right)原创 2015-09-08 16:04:56 · 209 阅读 · 0 评论 -
组合问题的递归方式解决
组合问题的递归方式解决思路如下 1.从n个样品中取出k个数,首先从这一堆样品中取出编号最大的数,然后从n-1个样品中取出k-1个样品,直到从n-(k-1)中取出1个数为止 2.从n个样品中选取编号次小的样品,继续执行1,直到编号为k的数为止 代码如下 #include <stdio.h>void combine(int arr[], int n, int k, int subset[]){原创 2015-11-26 14:21:30 · 215 阅读 · 0 评论