1.栈
由于栈属于后进先出类型,使用数组表示更加简便,下面的代码使用的是数组表示栈结构
#include<stdio.h>
#pragma warning(disable:4996)
struct Stack
{
char mData[1024];
int mLen;
};
//初始化栈
void InitStack(Stack &S) {
S.mLen = 0;
}
//元素进栈
void Push(Stack &S, char item) {
S.mData[S.mLen++] = item;
}
//删除栈顶元素
char Pop(Stack &S) {
S.mLen--;
return S.mData[S.mLen];
}
//返回栈顶元素
char Top(Stack &S) {
return S.mData[S.mLen - 1];
}
//判断栈是否为空
bool Empty(Stack &S) {
if (S.mLen == 0) {
return true;
}
return false;
}
//清空栈
void Clear(Stack &S) {
for (int i = 0; i < S.mLen; i++) {
Pop(S);
}
}
2.队列
队列属于先进先出,使用链表方便
#define maxsize 50
typedef struct SqQueue{
int data[maxsize];
int front;//队首指针
int rear;//队尾指针
}SqQueue;
//创建循环队列
SqQueue initQueue(){
SqQueue *sq=(SqQueue *)malloc(sizeof(SqQueue));
if(sq ==NULL){
return;
}
sq->rear=sq->front=0;
return *sq;
}
//判断循环队列是否为空
int isEmpty(SqQueue qu){
return (qu.front ==qu.rear?1:0);
}
//元素进循环队列
int enQueue(SqQueue *qu,int x){
if((qu->rear+1)%maxsize ==qu->front){
return 0;
}
qu->rear=(qu->rear+1)%maxsize;
qu->data[qu->rear]=x;
return 1;
}
//元素出循环队列
int deQueue(SqQueue *qu,int *y){
if(qu->rear ==qu->front){
return 0;
}
*y=qu->data[qu->front];
qu->front=(qu->front+1)%maxsize;
return 1;
}
//打印循环队列
int printQueue(SqQueue qu){
if(qu.rear ==qu.front){
return 0;
}
while(qu.rear !=qu.front){
qu.front=(qu.front+1)%maxsize;
printf("当前队列值=%d\n",qu.data[qu.front]);
}
return 1;
}