数据结构中栈的学习基础知识总结

本文总结了数据结构中栈的基础知识,包括栈的定义、基本操作如push和pop,以及栈的顺序存储结构和链式存储结构的实现。栈是一种特殊的线性表,主要在栈顶进行操作。在顺序存储中,栈用一维数组实现,而在链式存储中,通过链表结构来构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构中栈的学习基础知识总结

栈的描述

栈是一种特殊的的线性表,只在一端(栈顶,top)进行插入和删除

  • 输入数据:入栈 push
  • 删除数据并返回栈顶元素:出栈 pop

栈的操作集

  • 栈(stack)的长度 Maxsize
  • 栈的元素 item
  • 生成空栈
Stack CreateStack(int Maxsize)//生成空栈,最大长度为Maxsize
  • 判断栈是否满
int IsFull(Stack S,int Maxsize)
  • Push操作
void Push(Stack S ,ElementType item)
  • Pop操作
ElementType Pop(Stack S)
  • 判断栈是否为空
int IsEmpty(Stack S)

栈的操作
在这里插入图片描述


栈的顺序存储结构

  • 由一个存储的一维数组和记录栈顶元素的变量组成
#define MaxSize//存储数据元素的最大个数
typedef struct SNode *Stack;//在这之后Stack代表了struct SNode *
struct SNode{
   ElementType Data[MaxSize];
   int top;
};
  • 在初始化时一般
struct SNode S;
S.top=-1;//以便一开始时栈顶记录变量指向正确,在添加一个元素后top++
//如在空栈中添加了一个item,Data[top]就开始表示了栈顶元素
//减少一个元素后top--,对于顺序存储结构的栈而言,top=-1是判断空栈的标志
  • Push操作
void Push(Stack S,ElementType item)
{
if(S->top==MaxSize-1)
{
printf("栈堆满!");
return ;
}//判断栈是否满了
else{S->Data[++(S->top)]=item;
return;}
}
  • Pop操作
ElementType Pop(Stack S)
{
if(S->top==-1){
printf("此栈为空";
return ;
}
else{
return S->Data[(S->top)--];
}
}

栈的链式存储的实现

这类似于线性单链表的构建

  • 构造链栈的结构
typedef struct SNode{
      ElementType Data;
      SNode *next;
}SNode,*Stack;

Stack CreateStack()
{
Stack S;//头指针
S=(Stack)mallco(sizeof(Stack));
S->next=NULL;
return S;
}//创造一个空的栈链表
int IsEmpty(stack S)
{
return(S->next==NULL);
}//空栈返回1,非空返回0
  • 栈链表的Push操作
void Push(ELementType item,Stack S)//这里不用Stack *s的原因是无需改变S本身的指向,S始终作为栈顶元素
{
  SNode *TmpCell;
  TmpCell=(Stack)malloc(sizeof(Stack));
  TmpCell->next=S->next;
  TmpCell->Data=item;
  S->next=TmpCell;
}//这里没有设置判断内存是否满的操作是合理的,现在计算机内存比较大
  • 栈链表的Pop操作
ElementType Pop(Stack S)
{
  SNode *FirstCell;
  ElementType TopElement;
  if(IsEmpty(S)){
   printf("此栈为空!");
   return NULL;
    } 
  FirstCell=S->next;
  TopElement=FirstCell->Data;
  S->next=FirstCell->next;
  free(FirstCell);
  return TopElement;
}
                   ——————————中南大学人工智能系19级学生学习笔记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值