栈的知识

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;               //返回元素值
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值