您的位置:首页 > 理论基础 > 数据结构算法

三、数据结构基础之顺序栈C语言实现

2012-05-05 21:11 666 查看
/*
* 三、数据结构基础之顺序栈
* 顺序栈数据结构(结构的定义+在此结构上的操作)
* --- 2012年4月23日 ---by lee
*/

#ifndef _SEQUENTIAL_STACK_H
#define _SEQUENTIAL_STACK_H

#include "Utility.h"

//宏定义栈的空间大小
#define STACKSIZE 20

//类型定义
typedef int DataType;

//声明顺序栈类型结构体
typedef struct _SqStack
{
DataType data[STACKSIZE];//存放数据元素的数组
int top;//指向栈顶位置
} SqStack;

//对顺序栈的基本操作

void InitStack(SqStack* stack);//初始化,构造空栈
int IsStackEmpty(SqStack* stack);//判断栈是否为空
int IsStackFull(SqStack* stack);//判断栈是否为满
void Push(SqStack* stack, DataType x);//元素x入栈
DataType Pop(SqStack* stack);//栈顶出栈,返回栈顶元素
DataType StackTop(SqStack* stack);//取栈顶元素

//初始化,构造空栈
void InitStack(SqStack* stack)
{
stack->top=-1;
}

//判断栈是否为空
int IsStackEmpty(SqStack* stack)
{
return (stack->top==-1);
}

//判断栈是否为满
int IsStackFull(SqStack* stack)
{
return (stack->top==STACKSIZE-1);
}

//元素x入栈
void Push(SqStack* stack, DataType x)
{
//首先判断栈是否已满
if(IsStackFull(stack))
Error("Stack is full");
//栈顶指针加1
++stack->top;
stack->data[stack->top]=x;
}

//出栈,返回栈顶元素
DataType Pop(SqStack* stack)
{
//出栈前,判断栈是否为空
if(IsStackEmpty(stack))
Error("Stack is empty");
//保存栈顶元素
DataType ret=stack->data[stack->top];
stack->top--;//栈顶指针减1
return ret;
}

//取栈顶元素
DataType StackTop(SqStack* stack)
{
if(IsStackEmpty(stack))
Error("Stack is empty");

return stack->data[stack->top];
}

#endif

//测试代码
/*
SqStack s;
InitStack(&s);
Push(&s,1);
Push(&s,2);
Push(&s,3);
printf("stack top: %d\n",Pop(&s));
printf("stack top: %d\n",Pop(&s));
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: