王道之栈与队列

栈是一种重要的线性数据结构,其核心特点是后进先出(LIFO,Last In First Out),即最后加入的元素最先被取出。以下是关于栈的基础知识总结:

一、核心特性

  1. 操作受限:只能在栈的一端(称为 “栈顶”)进行插入和删除操作
  2. 栈底固定:另一端称为 “栈底”,不直接参与操作
  3. 顺序性:元素按照入栈顺序依次排列,遵循 LIFO 原则

二、基本操作

InitStack(&S):初始化栈。构造一个空栈 S,分配内存空间。
DestroyStack(&S):销毁栈。销毁并释放栈 S 所占用的内存空间。
Push(&S, x):进栈。若栈 S 未满,则将 x 加入使其成为新的栈顶元素。
Pop(&S, &x):出栈。若栈 S 非空,则弹出(删除)栈顶元素,并用 x 返回。
GetTop(S, &x):读取栈顶元素。若栈 S 非空,则用 x 返回栈顶元素。
StackEmpty(S):判空。断一个栈 S 是否为空,若 S 为空,则返回 true,否则返回 false

三、实现方式

1. 数组实现
  • 使用固定大小的数组存储元素
  • 用一个指针(栈顶指针)标记当前栈顶位置
  • 优点:访问速度快;缺点:大小固定,可能溢出
2. 链表实现
  • 用链表的头节点作为栈顶
  • 入栈相当于在表头插入节点,出栈相当于删除表头节点
  • 优点:大小动态调整;缺点:相比数组多了指针开销

静态数组实现栈

  • 进栈操作:栈不满时,栈顶指针先加1,再送值到栈顶元素。S.data[++S.top] = x
  • 出栈操作:栈非空时,先取栈顶元素值,再将栈顶指针减1。x = S.data[S.top--]
  • 栈空条件:S.top==-
  • 栈满条件:S.top==MaxSize-1
  • 栈长:S.top+1

这里的top记录的是现在的栈定元素,如果要push,那么top应该加加;

#include <iostream> 
using namespace std; 
#define Maxsize 10
typedef struct
{
    int data[Maxsize];
    int top;///top指向现在栈顶的元素
}SqStack;
void InitStack(SqStack &s)
{
    s.top=-1;
}
bool StackEmpty(SqStack &s)
{
    if(s.top==-1)return true;
    else return false;
}
bool Push(SqStack &s,int data)
{
    if(s.top==Maxsize-1)return false;
    s.top++;
    s.data[s.top]=data;
    return true;
}
bool GetTop(SqStack &s,int &x)
{
    if(s.top==-1)return false;
    x=s.data[s.top];
    return true;
}

 
int main() 
{ 
   cout << "Hello World"<<endl; 
   SqStack s;
   
   InitStack(s);
   cout<<s.top<<endl;
   bool exsit=StackEmpty(s);
   cout<<"empty or not  "<<exsit<<endl;
   Push(s,3);
   Push(s,4);
   Push(s,5);
   cout<<"empty or not  "<<StackEmpty(s)<<endl;
   cout<<s.top<<endl;
   cout<<GetTop<<endl;
   int size=s.top;
   while(s.top!=-1)
   {
       cout<<s.data[s.top]<<' ';
       s.top--;
   }
   cout<<endl;
   s.top=size;
   int x;
   GetTop(s,x);
   cout<<x<<endl;
   return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值