/*
2018年10月16日10:08:50
栈的基本功能是 出栈 入栈 遵循”先进后出“原则
所以栈的基本函数可以有栈的初始化 出入栈过程中栈的状态判断 是否为空或满 以及销毁
实现顺序栈的基本运算的算法
(1)初始化栈
(2)判断栈s是否为空
(3)一次入栈a, b, c, d, e
(4)再次判断栈s是否为空
(5)出栈所有元素
(6)再次判断是否为空
(7)销毁栈
*/
# include<stdio.h>
# include<stdlib.h>
# define MAXSIZE 10//注意有一个位置作为栈满标志
struct stack* Init_stack(void);
bool Gettop(struct stack* s, int* data);
bool Pop(struct stack* s, int* data);
bool Push(struct stack* s, int data);
bool Stack_full(struct stack* s);
bool Stack_empty(struct stack* s);
void Destroy_stack(struct stack* s);
struct stack
{
int data[MAXSIZE];//栈体
int top;//栈顶
};
int main(void)
{
struct stack* s = Init_stack();
int data, i;
if(Stack_empty(s))//判断是否为空
printf("stack is not empty!\n");
else
printf("stack is empty!\n");
printf("插入:");
for(i = 0; i < 11; i++)//入栈
{
if(Push(s, 'a'+i))
putchar('a'+i);
else
printf("栈满!\n");
putchar(',');
}
putchar('\n');
if(Stack_empty(s))//判断是否为空
printf("stack is not empty!\n");
else
printf("stack is empty!\n");
for(i = 0; i < 11; i++)//出栈
{
if(Pop(s, &data))
printf("%c ", data);
else
printf("空栈!\n");
}
putchar('\n');
if(Stack_empty(s))//判断是否为空
printf("stack is not empty!\n");
else
printf("stack is empty!\n");
Destroy_stack(s);//销毁栈
return 0;
}
/* 初始化栈 调用时会返回一个static stack *类型指针 并且这个指针指向一个栈 并且这个栈已经准备好被各种操作*/
struct stack* Init_stack(void)
{
struct stack* s = (struct stack*)malloc(sizeof(struct stack));
s->top = -1;//初始时设置栈顶为
return s;
}
void Destroy_stack(struct stack* s)
{
free(s);//销毁
}
//判断栈是否为空 true 为非空 false 为空
bool Stack_empty(struct stack* s)
{
if(s->top == -1)//当两者相同时为空
return false;
else
return true;
}
//判断栈是否为满 false 为满 ture 为非满
bool Stack_full(struct stack* s)
{
if(s->top == MAXSIZE - 1)
return false;//满
else
return true;//不满
}
//入栈 成功入栈返回true否则返回false
bool Push(struct stack* s, int data)
{//出栈入栈 时调整栈指针与入栈出栈数据位置不可以调换
if(Stack_full(s))//不满时入栈
{
s->top += 1;//调整栈顶指针
s->data[s->top] = data;//入栈
return true;
}
return false;//入栈失败 栈满
}
//出栈 出栈时判断是否为空 栈为空时出栈失败返回false 栈不为空返回true
bool Pop(struct stack* s, int* data)
{
if(Stack_empty(s))//是否为空
{
*data = s->data[s->top];//调整栈指针
s->top -= 1;
return true;
}
return false;
}
//取栈顶而不改变栈顶指针
bool Gettop(struct stack* s, int* data)
{
if(Stack_empty(s))//是否为空
{
*data = s->data[s->top];//与出栈基本相同不过 不调整栈指针
return true;
}
return false;
}
数据结构静态栈的基本功能实现
最新推荐文章于 2022-04-27 11:42:35 发布