数据结构整理——第三章 栈和队列

本文是关于数据结构中栈和队列的整理,涵盖了栈和队列的基本概念、操作、应用,如括号匹配、迷宫求解、矩阵压缩存储和广义表。同时介绍了栈和队列在缓冲区、广度优先搜索等场景中的使用,并提供了相关代码示例。

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

考研时个人整理的,参考王道、严蔚敏等数据结构。

上一章——线性表:https://blog.csdn.net/mooe1011/article/details/88036093

下一章——树:https://blog.csdn.net/mooe1011/article/details/88089462

1. 栈

  1. 初始化S.top=-1,栈顶元素S.data[S.top]
  2. 如果栈顶指针为S.top=0,则进栈S.data[S.top++]=x,出栈x=S.data[–S.top],相应栈空栈满条件也会变化
  3. 共享栈 topl(左边)=-1,topr(右边)=MaxSize;当topr-topl=1
  4. 链式栈Lhead指向栈顶元素
  5. 链式入队,相当于头插法,p->next=Lhead->next;Lhead->next=p;
  6. n个不同元素进栈,出栈序列为(卡特兰数): ( 2 n ) ! ( n + 1 ) ! n ! \dfrac{(2n)!}{(n+1)!n!} (n+1)!n!(2n)!
  7. 代码
    顺序栈
    #define MaxSize 50
    typedef struct {
        int data[MaxSize];
        int top;
    }SqStack;  //与顺序表差不多
    
    链式栈
    typedef struct LinkNode{
        int data;
        struct LinkNode *next;
    }*Listack;
  • 检查越界

    1. 栈满if(S.top==MaxSize-1)
    2. 栈空if(S.top==-1)
  • 进出栈

    1. 进栈 S.data[++S.top]=x; (先加)
    2. 出栈 x=S.data[S.top–]; (后减)
  • 判断栈序列是否合法

    int Judge (char A[]){
        int i=j=k=0;
        while(A[i]!='\0'){
            switch(A[i]){
                case 'I':j++;break;  //I代表入栈,O代表出栈,IOOO非法,IIOO合法
                case 'O':k++;
                if (k>j){
                    printf("非法\n");exit(0);
                }
            }
            i++;
        }
        if (j!=k){
            printf("非法\n");
            return false;
        } else {
            printf("合法\n");
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值