栈 是 数据结构中很重要的一个结构体,特点是 后进先出,由于栈的特点,所以在程序设计使用的频率很高。
下面是我写的一个很简单的栈以及一些对栈的操作:
/*
*File: stack.h
*Author:hui
*Created:2010-7-20
*Modified:
*/
#define MAXSIZE 100
typedef struct _stack{
char element[MAXSIZE];
int top;
}stack;
stack* create_stack();
int destory(stack ** );
int push_stack(stack* );
int pop_stack(stack* );
int empty_stack(stack* );
int clear_stack(stack* );
int print_stack(stack* );
/*
*File:stack.c
*Author:hui
*Created:2010-7-20
*Modified:
*
* 下面函数正常返回值都是1,若返回值为 -1 的话, 指向栈的指针为空,栈没
* 有内存空间
*
*/
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
/*创建栈,为栈分配内存空间*/
stack* create_stack()
{
stack *p;
int i;
p = (stack*)malloc(sizeof(stack));
if(p == NULL)
{
printf("Error malloc!/n");
exit(-1);
}
for(i = 0; i < MAXSIZE; i++)
p->element[i] = '/0';
p->top = 0;
return p;
}
/*=====释放栈所占的内存空间=====*/
int destory_stack(stack **p)
{
if(p == NULL) return -1;
free(*p);
*p = NULL;
return 0;
}
/*=============入栈==============*/
int push_stack(stack *p, char temp)
{
if(p == NULL) return -1;
if(p->top == MAXSIZE-1) return -2;
if(temp == '/0') return -3;
p->element[p->top] = temp;
p->top++;
return 0;
}
/*============出栈==============*/
int pop_stack(stack *p)
{
if(p == NULL) return -1;
if(p->top == 0) return -2;
p->top--;
return 0;
}
/*======判断栈是否为空======*/
int empty_stack(stack *p)
{
if(p == NULL) return -1;
if(p->top == 0) return 0;
return 1;
}
/*=====将栈清理为空=====*/
int clear_stack(stack *p)
{
if(p == NULL) return -1;
p->top = 0;
return 0;
}
/*=====打印栈里的内容======*/
int print_stack(stack *p)
{
int i;
if(p == NULL) return -1;
if(p->top == 0)
{
printf("The stack is empty!/n");
return -2;
}
for(i = 0; i < p->top; i++)
{
putchar(p->element[i]);
}
putchar('/n');
return 0;
}
以上代码我只是写了个简单的主函数了,基本测试通过,健壮性可能不是很好,其中可能有些不足或错误,欢迎大家指出!