【数据结构】 03 栈与队列

03 栈和队列

在这里插入图片描述

在这里插入图片描述

  • (顺序栈)定义:只允许在一端进行插入或者删除的线性表

    # define MaxSize 50  //定义栈中的最大元素
    typedef struct{
        Elemtype data[MaxSize];  //存放栈中元素
        int top;		//栈顶指针
    }SqStack;
    
  • 基本操作:

    • InitStack(&s): 初始化一个空栈
    • StackEmpty(s): 判断一个栈是否为空
    • Push(&s,x): 进栈
    • Pop(&s, &x) : 出栈
    • GetTop(S, &x) : 获取栈顶元素
    • ClearStack(&s): 销毁栈
  • 其他类型栈

    • 共享栈:利用栈低位置相对不变的特性,可以让两个顺序栈共享一个一维空间,将两个栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸
    • 链式存储结构栈:和单链表类似,但是没有头节点,一个指针直接指向第一个元素节点(栈顶),最后一个元素为栈底

队列

  • 定义:队列简称队,是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另外一端进行删除。

    • 队列中插入元素称为入队(进队)
    • 队列中删除元素称为出队(离队)
    • 对头:允许删除的一端,又称为队首
    • 队尾:允许插入的一端
  • 基本操作:

    • InitQueue(&Q):初始化队列
    • QueueEmpty(Q):判断队列为空
    • EnQueue(&Q, x):入队
    • DeQueue(&Q, & x):出队
    • GetHead(Q, &x):读队头元素
  • 队列的存储结构

    • 队列的顺序存储结构

      // 顺序存储就是指分配一块连续的存储单元存放到队列中的元素,并依附两个指针front和rear分别指示队头元素和对位元素
      # define Max 50				// 定义队列中元素的最大个数
      typedef struct{
          ElemType data{Max};		// 存放队列的元素
          int frout,rear;			// 队头指针和队尾指针
      }SqQueue;
      // 初始状态: Q.front == Q.rear == 0
      // 进队操作:队不满时, 先将值送到队尾元素,再将队尾指针加1
      // 出队操作:队不为空时,先取队头元素值,再将队头指针加1
      
    • 循环队列

      //顺序队列中存在只有一个元素,但是Q.rear == Max的情况,成为假上溢
      // 循环列表中,当Q.front = Max-1 后再前进一个位置就自动到0
      //----------------------------------------------------------
      //初始化:Q.front = Q.rear = 0;
      //队首指针进1:Q.front = (Q.front + 1) % Max
      //队尾指针进1:Q.rear = (Q.rear +1) % Max
      //队列的长度:(Q.rear + Max - Q.front) % Max
      //出队和进队时:指针都按顺时针方向进1
      
    • 队列的链式结构

      //队列的链式表示称为链队列,实际上是一个同时带有队头指针和队尾指针的单链表,头指针指向队头节点,尾指针指向队尾结点(即单链表的最后一个节点)
      tyepdef struct{				// 链式队列结点
          ElemType data;
          struct LinkNode *next;
      }
      typedef struct{				//链式队列
          LinkNode *front, *rear;	//队列的队头和队尾指针
      }LinkQueue;
      
    • 双端队列

      // 双端队列指的是允许两端可以进行入队和出队操作的队列
      

特殊矩阵的压缩存储

  • 对称矩阵

    $ k= \begin{cases}{\frac{i(i-1)}{2}+j-1} &i\ge j\ {\frac{j(j-1)}{2}+i-1} &i<j\ \end{cases} $

  • 三角矩阵

    $ k= \begin{cases}{\frac{(i-1)(2n-i+2)}{2}+j-i} &i\ge j\ {\frac{n(n+1)}{2}} &i<j\ \end{cases} $

  • 三角对称矩阵

  • 稀疏矩阵

    • 将非零元素及其对应的行和列构成三元组(行标,列表,值)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值