// 两个栈共享一个一维数组空间SPACE【N】, |
//栈底分别为SPACE[0] SPACE[N-1] |
//(1) 分别写出入栈 出栈的语句 |
//(2)分别写出栈满 栈空的条件 |
#define Maxszie 100 |
typedef struct Stack{ |
int data[Maxsize]; |
int top; |
}*SqStack; |
//元素X入栈1 |
int PUSH(SqStack *S1,SqStack *S2, int x) |
{ |
if (((*S2)->top-(*S1)->top)==1) //判断栈满 |
return ERROR; |
(*S1)->top++; |
(*S1)->data[(*S1)->top]=x; |
return OK; |
} |
//元素x出栈1 |
int POP(SqStack *S1, int *x) |
{ |
if ((*S1)->top==-1) //判断栈空 |
return ERROR; |
*x=(*S1)->data[(*S1)->top]; |
(*S1)->top--; |
return OK; |
} |
//元素x入栈2 |
int PUSH(SqStack *S2,SqStack *S1, int x) |
{ |
if (((*S2)->top-(*S1)->top)==1) //判断栈满 |
return ERROR; |
(*S2)->top--; |
(*S2)->data[(*S2)->top]=x; |
return OK; |
} |
//元素x出栈2 |
int POP(SqStack *S2,SqStack *S1, int *x) |
{ |
if ((*S2)->top==N) //判断栈空 |
return ERROR; |
*x=(*S2)->data[(*S2)->top]; |
(*S2)->top++; |
return OK; |
} |
//用循环数组q[M]表示队列 |
//该队列只有头指针front,没有尾指针rear,并改用计数器count用以记录队列中的结点个数 |
//(1)编写实现队列判空 入队 出队 |
//(2)队列最多能容纳元素个数 |
#define Maxsize 100 |
typedef struct { |
int data[Maxsize]; |
int front; //头指针 |
int count; //记录结点个数 |
}*SqQueue; |
//队列判空 |
int QueueEmpty(SqQueue *Q) |
{ |
if ((*Q)->count==0) |
return 0; |
return 1; |
} |
//入队 |
int EnQueue(SqQueue *Q, int x) |
{ |
int i=0; |
if ((*Q)->count==(M-1)) //判断队满 |
return ERROR; |
(*Q)->count++; |
i=((*Q)->front+(*Q)->count)/Maxsize; |
(*Q)->data[i]=x; |
return OK; |
} |
//出队 |
int DeQueue(SqQueue *Q, int *x) |
{ |
int i; |
if ((*Q)->count==0) //判断队空 |
return ERROR; |
*x=(*Q)->data[(*Q)->front]; |
(*Q)->front=((*Q)->front+1)/Maxsize; |
(*Q)->count--; |
return OK; |
} |
//允许循环队列在两端都可以进行插入和删除操作 |
//(1)写出循环队列的类型定义 |
//写出"从队尾删除"和"从对头插入"的算法 |
#define Maxsize 100 |
typedef struct { |
int data[Maxsize]; |
int front; |
int rear; |
int flat; //如果flat为Maxsize时,队满 flat为0时 队空 |
}*SqQueue; |
//从队尾删除 |
int DeQueueRear(SqQueue *Q, int *x) |
{ |
if ((*Q)->flat==0) //判断队空 |
return ERROR; |
*x=(*Q)->data[(*Q)->rear]; |
(*Q)->rear=((*Q)->rear-1)/Maxsize; |
(*Q)->flat--; |
return OK; |
} |
//从队头插入元素 |
int EnQueueFront(SqQueue *Q, int x) |
{ |
if ((*Q)->flat==Maxsize) //判断队满 |
return ERROR; |
(*Q)->front=((*Q)->front-1)/Maxsize; |
(*Q)->data[(*Q)->front]; |
(*Q)->flat++; |
return OK; |
} |