这是最近实训时写的关于栈的一些操作,保存下来:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
#define SIZE 100
typedef struct STACK{ //数据结构定义:将栈定义为结构体类型
char *base; // 栈底指针
char *top; // 栈顶指针
int size; //栈的大小
}stack;
// 函数声明
void Creat_stack(stack &l);
int Empty_stack(stack &l);
int Pop_stack(stcak &l,char &e);
int Gtop_stack(stack &l,char &e);
int Push_stack(stack &l,char &e);
int Clear_stack(stack &l);
// 函数定义部分
void Creat_stack(stack &l) // 创建一个空栈
{
l.base = (char *)malloc(sizeof(char) * SIZE);// 创建栈底空间
if(!l.base) // 如果栈底空间创建失败,则退出
exit(0);
l.top = l.base;// 将栈顶指针设为与栈底相同,表示此时是一个空栈
l.size = SIZE; // 栈的大小为宏定义的大小
}
int Empty_stack(stack &l) // 判断栈是否为空
{
if(l.base == l.top)
return 1;
else
return 0;
}
int Pop_stack(stcak &l,char &e) // 若栈不空,则删除栈顶元素,用e返回其值,并返回
{
if(Empty_stack(l))
return 0;
e = *(--l.top);
}
int Gtop_stack(stack &l,char &e) // 若栈不空,则用e返回栈顶元素
{
if(Empty_stack(l))
return 0;
e = *(l.top-1); // 用e返回栈顶元素
}
int Push_stack(stack &l,char &e)
{
// 插入元素e为新的栈顶元素
if(l.top - l.base >= l.size) // 栈满,增加存储空间
{
l.base = (char *)realloc(l.base,(l.size + N) * sizeof(char)); // realloc函数:第一个参数为原地址,第二个参数为要新开空间的大小
if(!l.base)
return 0;
l.top = l.base + l.size; // 定位栈顶指针
l.size += N; // 修改栈的大小
}
*l.top++ = e;
}
int Clear_stack(stack &l) // 清空栈
{
char *p = l.top;
while(!Empty(l))
{
p = l.top;
free(p); // 释放该结点
--l.top;
}
return 1;
}
int Length_stack(stack &l) // 返回栈中元素个数
{
char *p = l.top; // 定义一个指针,赋值为栈顶指针
int length = 0;
while(p != l.base) // 若不等于栈底指针,则继续循环
{
length++;
p++; // 继续循环
}
return length; // 返回栈中元素个数
}
<pre snippet_file_name="blog_20131121_1_5963388" code_snippet_id="76772">
<pre snippet_file_name="blog_20131121_1_53660" code_snippet_id="76772">