写一个顺序栈
2016-12-10 22:19
239 查看
任务和代码:
#include <stdio.h>
#define STACK_SIZE 100 //定义栈大小为100
#define OK 0
#define ERROR -1
typedef int DATATYPE;
typedef struct
{
DATATYPE data[STACK_SIZE]; // 栈数组
int top; // 栈顶下标
}SeqStack;
// 置空栈
int InitStack (SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
s->top = -1;
return OK;
}
// 判断空栈
int StackEmpty(SeqStack *s)
{
if (s == NULL)
{
return ERROR; // 错误返回-1
}
return s->top == -1; // 逻辑表达式 相等返回1 不相等返回0
}
// 判断满栈
int StackFull(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
return s->top == STACK_SIZE-1;
}
// 压栈
int Push(SeqStack *s, DATATYPE data)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否满栈
if (StackFull(s))
{
return ERROR;
}
/* s->top++;
s->data[s->top] = data; */
s->data[++s->top] = data;
printf ("%4d", data);
return OK;
}
// 出栈
int Pop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
DATATYPE data = s->data[s->top--];
return data;
}
// 获取栈顶元素
int GetTop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
printf("栈顶元素值=");
printf("%d\n", s->data[s->top]);
return s->data[s->top];
}
int main()
{
SeqStack stack; // 栈结构体变量
if (InitStack(&stack) != OK)
{
return -1;
}
if (StackEmpty(&stack))
{
printf ("是空栈\n");
}
else
{
printf ("不是空栈\n");
}
int i;
for (i=0; i<10; i++)
{
if(Push (&stack, i) != OK)
{
return -1;
}
}
printf("\n");
if (StackEmpty(&stack))
{
printf ("是空栈\n");
}
else
{
printf ("不是空栈\n");
}
GetTop(&stack);
for (i=0; i<10; i++)
{
printf ("%4d", Pop(&stack));
}
printf("\n");
if (StackEmpty(&stack))
{
printf ("是空栈\n");
}
else
{
printf ("不是空栈\n");
}
return 0;
}
运行结果:
心得体会:
栈,是硬件。主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。
它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
#include <stdio.h>
#define STACK_SIZE 100 //定义栈大小为100
#define OK 0
#define ERROR -1
typedef int DATATYPE;
typedef struct
{
DATATYPE data[STACK_SIZE]; // 栈数组
int top; // 栈顶下标
}SeqStack;
// 置空栈
int InitStack (SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
s->top = -1;
return OK;
}
// 判断空栈
int StackEmpty(SeqStack *s)
{
if (s == NULL)
{
return ERROR; // 错误返回-1
}
return s->top == -1; // 逻辑表达式 相等返回1 不相等返回0
}
// 判断满栈
int StackFull(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
return s->top == STACK_SIZE-1;
}
// 压栈
int Push(SeqStack *s, DATATYPE data)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否满栈
if (StackFull(s))
{
return ERROR;
}
/* s->top++;
s->data[s->top] = data; */
s->data[++s->top] = data;
printf ("%4d", data);
return OK;
}
// 出栈
int Pop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
DATATYPE data = s->data[s->top--];
return data;
}
// 获取栈顶元素
int GetTop(SeqStack *s)
{
if (s == NULL)
{
return ERROR;
}
// 判断是否空栈
if (StackEmpty(s))
{
return ERROR;
}
printf("栈顶元素值=");
printf("%d\n", s->data[s->top]);
return s->data[s->top];
}
int main()
{
SeqStack stack; // 栈结构体变量
if (InitStack(&stack) != OK)
{
return -1;
}
if (StackEmpty(&stack))
{
printf ("是空栈\n");
}
else
{
printf ("不是空栈\n");
}
int i;
for (i=0; i<10; i++)
{
if(Push (&stack, i) != OK)
{
return -1;
}
}
printf("\n");
if (StackEmpty(&stack))
{
printf ("是空栈\n");
}
else
{
printf ("不是空栈\n");
}
GetTop(&stack);
for (i=0; i<10; i++)
{
printf ("%4d", Pop(&stack));
}
printf("\n");
if (StackEmpty(&stack))
{
printf ("是空栈\n");
}
else
{
printf ("不是空栈\n");
}
return 0;
}
运行结果:
心得体会:
栈,是硬件。主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。
它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
相关文章推荐
- sdut oj3-7 类的友元函数的应用
- XDOJ-1100-无聊的xry111(RMQ)
- 用Docker Registry 建立私有镜像库
- 原型模式——javascript的面向对象
- JavaScript学习笔记4--对象
- android JNI java调用c/c++资料
- 预备作业01:你期望的师生关系是什么?
- 内存分析工具MAT的使用
- 【鸟哥Linux】Linux帮助man手册
- struct 成员的对齐方式
- 笔记--------手动分页
- RAC,InfiniBand,RDS,private,Interconnect相关
- (6)Spring Boot datasource - mysql【从零开始学Spring Boot】
- Python3实现求质因数
- 【给将来学神的算法详解--数据结构】(1)栈
- shell脚本中echo带颜色输出
- XML基础
- volatile是否能保证数组中元素的可见性?
- 结合程序崩溃后的core文件分析bug
- (转)CPU Cache与内存对齐