用两栈实现一个队列的操作:(队列操作包括出队,入队)
分文件编写代码:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"stack.h"
void init_stack(stack* st,int len)
{
st->stk=(int*)malloc(sizeof(int)*len);
assert(st->stk!=NULL);
st->len=len;
st->count=0;
}
bool isfull_stack(const stack* st)
{
return st->count==st->len?true:false;
}
bool isempty_stack(const stack* st)
{
return st->count==0?true:false;
}
bool push_stack(stack* st,int x)
{
if(isfull_stack(st))
{
printf("\n栈空间已满\n");
return false;
}
st->stk[st->count]=x;
st->count++;
return true;
}
bool pop_stack(stack* st,int* x)
{
if(isempty_stack(st))
{
*x=0;
printf("\n栈是空的\n");
return false;
}
if(NULL!=x)
{
*x=st->stk[st->count-1];
}
st->count--;
return true;
}
#include<stdio.h>
#include"queue.h"
int main()
{
queue qe;
int x;
init_queue(&qe,5);
push_queue(&qe,1);
push_queue(&qe,2);
push_queue(&qe,3);
push_queue(&qe,4);
push_queue(&qe,5);
push_queue(&qe,6);
pop_queue(&qe,&x);
printf("%d ",x);
pop_queue(&qe,&x);
printf("%d ",x);
pop_queue(&qe,&x);
printf("%d ",x);
pop_queue(&qe,&x);
printf("%d ",x);
pop_queue(&qe,&x);
printf("%d ",x);
pop_queue(&qe,&x);
printf("%d ",x);
printf("\n");
}
思路:
注意栈和队列的区别:
栈:先进后出,后进先出;
队列:先进先出,后进后出;
所以只要再main函数中,对栈进行两次操作即可,先出栈以后保存至另一个栈,再从新的栈中出栈,就实现了队列的操作。
2.链表操作注意:
链表操作重点是插入,删除,修改,排序,查找。功能实现有所重叠,可以嵌套调用函数。
但是要考虑头插,中间插入,尾部插入,头部删除,中间删除,尾部删除等各种情况,记得入参检查,否则段错误乱报奥。
没咯。。。