#include<stdio.h>
#include<stdlib.h>
//栈
typedef struct Stack
{
int date;
Stack *next;
}Stack;
//队列
typedef struct Queue
{
Stack *front;
Stack *tail;
}Que;
//栈的初始化
void Init_stack(Stack **top)
{
*top= (Stack*)malloc(sizeof(Stack));
(*top)->next = NULL;
}
//入栈
int push(Stack *top,int date)
{
Stack *p = (Stack *)malloc(sizeof(Stack));
if (p == NULL)
{
return -1;
}
p->date = date;
p->next = top->next;
top->next = p;
return 1;
}
//出栈
int pop(Stack *top,int &date)
{
Stack *p;
if (top->next == NULL)
return -1;
date = top->next->date;
p = top->next;
top->next = p->next;
free(p);
return 1;
}
//判断栈是否为空
int empty_Stack(Stack top)
{
if (top.next == NULL)
return 1;
return 0;
}
//查看栈顶的值
int get_Stack(Stack * top,int &date)
{
if (top->next == NULL)
{
date = -1;
return -1;
}
date = top->next->date;
}
//队列初始化
void Init_que(Que *que)
{
Init_stack(&(que->front));
Init_stack(&(que->tail));
}
//入队
int enter(Que *que,int date)
{
push(que->tail,date);
return 1;
}
//判断队列是否为空
int empty(Que que)
{
if (que.front->next == NULL&&que.tail->next == NULL)
return 1;
else
return 0;
}
//出队
int delete_que(Que *que,int &date)
{
if (empty(*que))
{
printf("队列为空\n");
date = -1;
return -1;
}
Que *p = que;
if (p->front->next != NULL)
{
pop(que->front, date);
return 1;
}
while (p->tail->next !=NULL)
{
int num = 0;
pop(p->tail, num);
push(p->front, num);
}
pop(que->front,date);
return 1;
}
//获得队头的值
int get(Que *que, int &date)
{
if (empty(*que))
{
printf("队列为空\n");
date = -1;
return -1;
}
Que *p = que;
if (p->front->next != NULL)
{
get_Stack(que->front, date);
return 1;
}
while (p->tail->next != NULL)
{
int num = 0;
pop(p->tail, num);
push(p->front, num);
}
get_Stack(que->front, date);
return 1;
}
int main(void)
{
Stack *p;
Init_stack(&p);
push(p,10);
int x = 0;
pop(p,x);
Que que;//申请一个队列
Init_que(&que);
enter(&que,10);
enter(&que, 20);
int date = 0;
get(&que,date);
printf("获得队头的值%d\n",date);
delete_que(&que,date);
printf("出队的值为%d\n",date);
enter(&que, 30);
enter(&que, 40);
get(&que, date);
printf("获得队头的值%d\n", date);
delete_que(&que, date);
printf("出队的值为%d\n", date);
get(&que, date);
printf("获得队头的值%d\n", date);
printf("判断是否为空%d\n",empty(que));
return 0;
}
两个栈实现队列的功能。(外部接口是队列)
最新推荐文章于 2023-04-01 22:37:16 发布