栈的知识
来源:互联网 发布:复读好不好知乎 编辑:程序博客网 时间:2024/06/18 06:06
1、定义
栈是限制仅能在表的一端进行插入和删除操作的线性表
栈顶(top): 允许插入和删除的一端
栈底(bottom): 不允许插入和删除的一端
空栈: 不含元素的空表
2、栈的存储结构
(1)顺序
结构定义:
#define mazsize 100 //栈的最大容量
typedef int elemtype;
typedef struct
{
elemtype elem[mazsize];
int top;
}sqstacktp;
初始化栈:
void Initstack(sqstacktp *s)
{
s->top = 0; //将顺序栈s初始化为0
}
判断栈空:
int StackEmpty(sqstacktp *s)
{
if (s->top > 0)
return 0;
else
return 1;
}
压栈:
void Push(sqstacktp *s,elemtype x)
{
if (s->top == maxsize)
printf("Overflow");
else
s->elem[s->top++] = x; //x进栈
}
出栈:
elemtype Pop(sqstacktp *s)
{
if (s->top == 0)
return NULL;
else
{
s->top--; //栈顶指针减1
return s->elem[s->top]; //返回栈顶元素值
}
}
求栈深:
int Size(sqstacktp *s)
{
return s->top;
}
取栈顶元素操作:
elemtype Top(sqstacktp *s)
{
if (s->top == 0)
return NULL;
else
return s->elem[s->top-1];
}
(2)链式
结构定义:
typedef int elemtype;
typedef struct stacknode
{
elemtype data;
struct stacknode *next;
}stacknode;
typedef struct
{
stacknode *top; //栈顶指针
}LinkStack;
初始化:
void InitStack(LinkStack *ls)
{
ls->top = NULL;
}
进栈:
void Push(LinkStack *ls, elemtype x)
{
stacknode *s = NULL;
s = (stacknode *)malloc(sizeof(stacknode)); //生成新结点
s->data = x;
s->next = ls->top; //链入新结点
ls->top = s; //修改栈顶指针
}
出栈:
elemtype Pop(LinkStack *ls)
{
stacknode *p = NULL;
elemtype x;
if (ls->top == NULL) //删除栈顶元素返回NULL
return NULL;
else
{
x = (ls->top)->data;
p = ls->top;
ls->top = p->next;
free(p);
return x; //返回元素值
}
}
- 栈的知识
- 栈的相关知识
- 栈和队列的知识
- 栈stack的小知识
- 有关栈的小知识
- 知识 VS 获取知识的知识
- 堆和栈的一些知识
- 堆和栈的区别--内存知识
- 关于堆和栈的一点知识
- 进栈,出栈的详细知识
- 堆和栈的一点知识
- 知识图谱与知识栈
- 什么是真正的知识?真知识 垃圾知识
- 数据库知识:Oracle服务的知识详解
- 学习知识的能力重于知识本身
- 【知识分享】提供消遣的小知识
- 【转帖】不为人知的知识.
- OPC的相关知识
- poj-2492 -A Bug's Life-并查集的使用
- xcode7、iOS9 设置启动图片(Launch Image)
- perl - 单引号和双引号字符串
- 特别码字
- 【小白装系统】——BIOS简介
- 栈的知识
- 待更正
- 拒绝OOM,打造自定义帧动画
- javascript 简单导航菜单设计
- setter和getter方法
- C++利用栈进行十进制与二进制的转换
- hihoCoder之hiho一下 第六十九周 解题
- linux 下C编程(七) 之 杂杂的程序
- 五子棋项目开发日志