易截截图软件、单文件、免安装、纯绿色、仅160KB

栈的C实现(stack)

rows="2" cols="20" id="ctl00_ctl00_cphContent_cphDoc_EntryEditor1_richTextEditor" class="mceEditor" style="height:450px;width:100%;">
栈是数据结构中最基础也是最经典的数据结构,无论在应用还是操作系统中均可以看到其身影。栈是一种特殊的
线性表,即限制在表的一端进行插入、删除运算。通常插入、删除的一端称为栈顶,另一端称为栈底,当栈中没
有数据时称为空栈。
栈中数据的插入和删除只在栈顶进行,所以栈中的数据总是后进先出(LIFO)。
栈上基本的运算有五种:
* SETNULL(s) 置栈s为空栈。
* EMPTY(s)   判断栈s是否为空。
* PUSH(s,x)  往栈s压入数据x。
* POP(s)     若栈s不为空,则弹出栈顶数据。
* TOP(s)     若栈s不为空,取栈顶数据。
下面,给出栈的最基本的实现代码:
#include <assert.h>
#define STACK_SIZE (1 << 6)
static stack_t stack[STACK_SIZE];
static int top = -1;
static int stack_full(void)
{
return (top == STACK_SIZE - 1);
}
static int stack_empty(void)
{
return (top == -1);
}
void stack_push(stack_t val)
{
assert(!stack_full());
stack[++top] = val;
}
stack_t stack_pop(void)
{
assert(!stack_empty());
--top;
return stack[top + 1];
}
stack_t stack_top(void)
{
assert(!stack_empty());
return stack[top];
}
 
从上面的实现代码可以看出,实现栈的基本操作的代码是非常简单的,不过二三十行的代码量。如果在实际的代
码开发中,根据应用的特定数据类型实现上述几个操作接口也是很容易的,但存在几个明显的缺陷:
* 代码不具备复用性。
* 采用静态数组存储,栈空间需在编译前确定。
* 不支持存储多种数据类型,需要修改stack_t定义。
为此,我们重新实现了如下的一套结构,来满足上面的这些复用性特征需求,代码如下:
#include <stdlib.h>
#include <string.h>
#include <assert.h>
struct _stack {
int top;
size_t len;
size_t size;
char *base;
};
typedef unsigned int hdl;
typedef struct _stack stack;
hdl stack_create(size_t size, size_t len)
{
stack *vp = (stack*)malloc(sizeof(stack));
if (vp == NULL) {
return 0;
}
assert(size > 0 && len > 0);
vp->base = (char*)malloc(size *


相关文档:

给你的C程序加上颜色

标准C控制台程序也可以自定义文字输出颜色,让打印信息更鲜明,在debug的时候特别有用。方法很简单:
转自:http://www.diybl.com/course/3_program/c/c_js/20090303/157456.html
先从一个例子开始
printf("\033[31m ####----->> \033[32m" "hello\n" "\033[m");

颜色分为背景色和字体色,30~39用来设置字体色 ......

C整型升级和寻常算术转换

                                                   ......

如何用C产生0 99随机数?

#include <stdlib.h>
#include<stdio.h>
#include<time.h>
#define randomize() srand((unsigned)time(NULL)) //定义一个宏
int main(void)
{
int i;
printf("Ten random numbers from 0 to 99\n\n");
randomize();
for(i=0; i<100; i++)
{
printf("%d\n", rand() % 100);
sleep(1) ......

C语言函数(二)

【例8.6】Hanoi塔问题
    一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。如图5.4所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。
本题算法分析如下,设A上 ......

为什么选择C语言

为什么C语言依然如此流行?历史上,由于种种原因,业界选择了C,其中最主要的原因就在于它的效率。优秀的C程序的效率几乎和汇
编语言程序一样高,但C程序明显比汇编语言程序更易于开发。和许多其他语言相比,C给予程序员更多的控制权,如控制数据的存储位置和初始化过程等。C缺乏“安全网”特性,这虽有助于提高 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号