首页 > 编程语言 > 详细

栈、队列和数组

时间:2015-03-27 16:49:05      阅读:247      评论:0      收藏:0      [点我收藏+]

一、栈和队列的基本概念

 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、对角矩阵

 

栈、队列和数组

原文:http://www.cnblogs.com/helpless/p/4371825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!