数据结构——栈和队列
目录:
栈:
栈示意图(后进先出):
顺序栈:
顺序栈结构定义:
#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()
{
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