队列
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
#define QUEUEMAX 15
typedef struct DATA {
char name[20];
int age;
}DATA;
typedef struct stack {
DATA data[SIZE + 1];
int top;
}SeqStack;//栈
typedef struct {
DATA data[QUEUEMAX];
int head;//队头
int tail;//队尾
}SeqQueue;//队列
//---------------------------------------------------------------
SeqQueue *SeqQueueInit() {
//队列初始化
SeqQueue *q;
if (q = (SeqQueue *)malloc(sizeof(SeqQueue))) {
q->head = 0;
q->tail = 0;
return q;
}
else {
return NULL;
}
}
void SeqQueueFree(SeqQueue *q) {
if (q != NULL) {
free(q);
}
}
int SeqQueueIsEmpty(SeqQueue *q) {
return (q->head == q->tail);
}
int SeqQueueIsFull(SeqQueue *q) {
return (q->tail == QUEUEMAX);
}
int SeqQueueLen(SeqQueue *q) {
return (q->tail - q->head);
}
int SeqQueueIn(SeqQueue *q, DATA data) {
//入队
if (q->tail == QUEUEMAX) {
printf("队列已满!\n");
return 0;
}
else {
q->data[q->tail++] = data;
return (1);
}
}
DATA *SeqQueueOut(SeqQueue *q) {
//出队
if (q->head == q->tail) {
printf("\n队列已空!\n");
return NULL;
}
else {
//队列未空
return &(q->data[q->head++]);
}
}
DATA *SeqQueuePeek(SeqQueue *q) {
//获取队列头结点
if (SeqQueueIsEmpty(q)) {
prinf("\n队列为空!\n");
return NULL;
}
else {
return &(q->data[q->head]);
}
}
//-----------------------------------------------------------------
SeqStack *SeqStackInit() {
//初始化
SeqStack *p;
if (p = (SeqStack *)malloc(sizeof(SeqStack))) {
p->top = 0;
return p;
}
return NULL;
}
void SeqStackFree(SeqStack *s) {
if (s) {
free(s);
}
}
int SeqStackIsEmpty(SeqStack *s) {
return (s->top == 0);
}
void SeqStackClear(SeqStack *s) {
s->top = 0;
}
int SeqStackIsFull(SeqStack *s) {
return (s->top == SIZE);
}
int SeqStackPush(SeqStack *s, DATA data) {
//入栈
if ((s->top + 1) > SIZE) {
printf("栈溢出!\n");
return 0;
}
s->data[++s->top] = data;
return 1;
}
DATA SeqStackPop(SeqStack *s) {
//出栈
if (s->top == 0) {
printf("栈为空!\n");
exit(0);
}
return (s->data[s->top--]);//弹出栈顶元素
}
DATA SeqStackPeek(SeqStack *s) {
if (s->top == 0) {
printf("栈为空!\n");
exit(0);
}
return (s->data[s->top]);
}
int main() {
SeqStack *stack;
DATA data, data1;
stack = SeqStackInit();//初始化
printf("入栈操作:\n");
printf("输入姓名 年龄进行入栈操作:");
scanf("%s%d", data.name, &data.age);
SeqStackPush(stack, data);//入栈
printf("输入姓名 年龄进行入栈操作:");
scanf("%s%d", data.name, &data.age);
SeqStackPush(stack, data);
printf("\n出栈操作:\n按任意键进行出栈操作:");
getch();
data1 = SeqStackPop(stack);
printf("出栈的数据是(%s, %d)\n", data1.name, data1.age);
printf("在按任意键进出站操作:");
getch();
data1 = SeqStackPop(stack);//出栈
printf("出栈的数据是(%s,%d)\n", data1.name, data1.age);
SeqStackFree(stack);//释放空间
getch();
return 0;
}