栈和队列
- 栈:后进先出
- 栈的初始化
- 判断栈满,栈空
- 入栈,出栈操作
- 队列:先进先出
- 队列的初始化
- 判断队列满,队列空
- 入队,出队操作
题目:两个栈实现队列的先进先出
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef struct stack{
int *space;
int len;
int count;
}Stack;
void stack_init(Stack *s,int n){
s->space = (int*)malloc(n*sizeof(int));
s->len = n;
s->count = 0;
}
bool is_empty(Stack s){
if(s.count){
return false;
}
else{
return true;
}
}
bool is_full(Stack s){
if(s.len == s.count){
return true;
}
else{
return false;
}
}
bool put_in_stack(Stack *s,int data){
if(is_full(*s)){
puts("栈满");
return false;
}
s->space[s->count] = data;
s->count++;
}
bool take_out_stack(Stack *s,int *data){
if(is_empty(*s)){
puts("栈空");
return false;
}
if(data){
*data = s->space[s->count-1];
}
s->count--;
}
int main(){
/*新建两个栈*/
Stack s1,s2;
/*初始化两个栈长度都为10*/
stack_init(&s1,10);
stack_init(&s2,10);
/*将数据放入s1栈*/
int data;
for(int i = 0;i < 10;i++){
scanf("%d",&data);
while(getchar()!='\n');
put_in_stack(&s1,data);
}
/*出s1栈,放s2栈*/
for(int i = 0;i < 10;i++){
take_out_stack(&s1,&data);
put_in_stack(&s2,data);
}
/*出s2栈*/
for(int i = 0;i < 10;i++){
take_out_stack(&s2,&data);
printf("%d ",data);
}
putchar('\n');
return 0;
}