数据结构与算法学习笔记 (5)--顺序栈的实现
【摘要】
一、背景
栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈)。允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”
特点 :后进先出(LIFO)。
顺序栈 : 它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针t...
一、背景
栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈)。允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”
特点 :后进先出(LIFO)。
顺序栈 :
它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。
二、顺序栈的数据结构
-
typedef int data_t ; /*定义栈中数据元素的数据类型*/
-
typedef struct
-
{
-
data_t *data ; /*用指针指向栈的存储空间*/
-
int maxlen; /*当前栈的最大元素个数*/
-
int top ; /*指示栈顶位置(数组下标)的变量*/
-
} seqstack_t; /*顺序栈类型定义*/
三、顺序栈的相关操作
1.创建一个栈
-
sqstack* stack_create(int len)
-
{
-
sqstack *s;
-
-
if((s=(sqstack *)malloc(sizeof(sqstack)))==NULL)
-
{
-
puts("malloc failed");
-
return NULL;
-
}
-
if((s->data=(datatype *)malloc(len*sizeof(datatype)))==NULL)
-
-
{
-
puts("malloc failed");
-
return NULL;
-
}
-
s->maxlen=len;
-
s->top=-1;
-
-
return s;
-
}
2.将一个元素压入(push)栈
-
int stack_push(sqstack* s,datatype value)
-
{
-
if(s->top==s->maxlen-1){
-
puts("stack is full");
-
return -1;
-
}
-
-
s->data[s->top+1]=value;
-
s->top++;
-
-
return 1;
-
}
3.将一个元素从栈中弹出
-
datatype stack_pop(sqstack* s)
-
{
-
s->top--;
-
return s->data[s->top+1];
-
}
4.释放栈
-
void stack_free(sqstack *s)
-
{
-
free(s->data);
-
s->data=NULL;
-
-
free(s);
-
s=NULL;
-
}
5.其他操作(判断栈空、判断栈满、清空栈)
-
//判断栈是否为空
-
int stack_empty(sqstack* s)
-
{
-
return (s->top==-1 ? 1:0);
-
}
-
-
//判断栈是否为满
-
int stack_full(sqstack* s)
-
{
-
return (s->top==(s->maxlen-1) ? 1:0);
-
}
-
-
//清空栈中的元素
-
void stack_clear(sqstack* s)
-
{
-
s->top = -1;
-
}
文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/feit2417/article/details/81087792
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)