数据结构 —— 栈和队列

                                 数据结构——栈和队列

                              

目录:

栈 --- 基础知识

栈 --- 练习题

队列 --- 基础知识

栈: 

  

 

栈示意图(后进先出):

 

顺序栈:

顺序栈结构定义:

#define MAXSIZE 1024

struct Stack{

       ElemType data[MAXSIZE];

       int top;

};

 

操作函数:

push();   //入栈

pop();     //出栈

……….

  

链栈:

struct Lstack{        //链栈

       ElemType data;

       Lstack* next;

};

 

链栈示意图:

 

操作函数:

push();    //入栈

pop();     //出栈

……….

 

注意:

也可以直接调用系统已经写好的库函数

#include <stack.h>

int main()

{

       stack <int> s;  //泛型,指定栈中数据类型

       s.push(5);              //将5送入栈

       s.pop(5);        //将5送出栈

       ……..

}

练习题:

//以下是训练压栈出栈等,栈的基本用法的简单题:

括号匹配(栈和队列) 

十进制与八进制的转换(栈和队列)

相同序列(栈和队列)

回文(栈和队列)

 

队列:

 

队列示意图(先进先出):

 

栈是只对一头操作,队列是对两头都操作。

 

线队列:

 线队列类型定义:

#define MAXSIZE 1024        //队列最大长度

struct SeQueue{

       ElemType data[];

       int front,rear;        

//front,队头,删除端,线性表的表头;rear,队尾,插入端,线性表的表尾。

       int num;  //当前队列长度

};

 

操作函数:

push();    //入队

pop();     //出队

…………

 

注意:

front指向的是第一个数据的前一个位置。

rear指向的是最后一个数据的位置。

 

 

 

循环队列:

 

循环队列示意图:

 

循环队列类型定义:

#define MAXSIZE 1024

struct{

       ElemType data[MAXSIZE];

       int front,rear;

};

 

操作函数:

push();    //入队

pop();     //出队

……….

 

注意:

因为是循环队列,所以进队的时候不能简单的 +1了。

 

队头指针进1:(rear+1)%MAXSIZE

队尾指针进1:(front+1)%MAXSIZE

队列初始化:front=rear=0

队空条件:front==rear

队满条件:(rear+1)%MAXSIZE == front

 

怎么判断队满?

正常来说队满的时候front会等于rear,这就跟开始一样了。

所以要做一些设置。

有多种方法。

可以浪费最后一个位置。

用:if((rear+1)%MAXSIZE ==fiont       //队满

来判断队满。

 

也有库函数

#include <queue.h>

使用类似栈。

链队列:

链队列示意图:

 

 链队列类型定义:

struct LQueue{

       ElemType data;

       LQueue* next;

};

 

操作函数:

push();    //入队

pop();     //出队

……….

 

注意:

链队列是队尾进,队首出。

 

 

Freecode : www.cnblogs.com/yym2013

posted @ 2013-08-05 15:38  Freecode#  阅读(462)  评论(0编辑  收藏  举报