1 栈的抽象数据类型
ADT Stack
{
数据对象:D = {a[i]|}
数据关系:R1 = {<a[i-1],a[i]>}
约定a[n]端为栈顶,a[1]端为栈底。
基本操作:
}ADT Stack;
1.1 顺序栈
typedef int SElemType;
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
1.2 链栈
typedef struct SNode
{
SElemType data;
struct SNode *next;
}SNode,*LinkStack;
2 队列的抽象数据类型
ADT Queue
{
数据对象:D = {a[i]|}
数据关系:R1 = {<a[i-1],a[i]>}
约定a[1]为队头,a[n]为队尾
基本操作
}ADT Queue
2.1 链队列
结点定义
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
链队列类型
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
2.2 顺序队列
typedef int QElemType;
#define MAXQSIZE 100;
typedef struct
{
QElemType *base;
int front;
int rear;
}SqQueue;
2.3 循环队列
把队列设成环形,首尾相接,解决了假溢出的问题
设置一个标志区分空满队列,少用一个元素空间
此时
队空条件:Q.front == Q.rear
队满条件:(Q.rear+1)%MAXSIZE == Q.front
初始化时
Status InitQueue(SqQueue &Q)
{
Q.base = (QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base)
exit OVERFLOW;
Q.front = Q.rear = 0;
return OK;
}