栈、队列和数组

一、栈和队列的基本概念

 1.栈是一种线性表无疑。一般提供两种操作:入栈(PUSH) 和出栈( POP)。分别对应着数据插入和数据删除。

  队列的话,也是一种线性表。和栈不同的是,栈只能在栈顶操作(PUSH&POP),而队列被限制为从一端入,从另一端出。

  这里的栈和队列指的都是最一般的情况。

 2.栈是先进后出的(First In Last Out, FILO),队列是先进先出的(First In First Out, FIFO)。

 从真题来看,这部分题考概念的比较简单。

二、栈和队列的顺序存储结构

  1、顺序栈

1 //定义
2 typedef struct
3 {
4     int data[max_size];//比如 int data[100];
5     int top; //栈顶
6 }SqStack;

  考试的时候,简单的可以这么写

1 int myStack[max_size];//例如int myStack[1000];
2 int top = -1;
3 
4 //Push key
5 myStack[++top] = key;
6 //POP
7 key = myStack[top--];

  2、顺序队

1 typedef struct
2 {
3         int data[max_size];
4         int front;
5         int rear;
6 }SqQueue;

  3、循环队列

  front和rear循环。

  rear不能超过front一圈。

  这部分内容比较绕的就是循环队列,还有就是队头队尾的位置判断,还有对队列为空和为满的判断。

三、栈和队列的链式存储结构

  1、栈 链式实现

 1 typedef struct LNode
 2 {
 3     int data;
 4     struct LNode *next;
 5 }LNode, *LinkStack;
 6 
 7 //PUSH
 8 newLNode->data = key;
 9 newLNode->next = headLNode->next;
10 headLNode->next = newLNode;
11 
12 //POP
13 temp = headLNode->next;
14 key = temp->data;
15 headLNode->next = temp->next;
16 free(temp);

  2、队列 链式实现

 1 typedef struct QNode
 2 {
 3     int data;
 4     int QNode *next;
 5 }QNode;
 6 
 7 typedef struct
 8 {
 9     QNode *front;
10     QNode *rear;
11 }LinkQueue;
12 
13 //入队
14 lqu->rear->next = p;
15 lqu->rear = p;
16 //出队
17 p = lqu->front;
18 lqu->front = p->next;
19 key = p->data;
20 free(p);

四、栈和队列的应用

  栈的话,很常规的一个东西就是表达式计算。

  队列的话,CPU资源竞争的问题、主机和打印机之间的协调等等。

五、特殊矩阵的压缩存储

  1、对称阵A压缩到SA[n(n+1)/2];

  2、三角矩阵A压缩到SA[n(n+1)/2];

  3、对角矩阵

 

转载于:https://www.cnblogs.com/helpless/p/4371825.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值