需要借助两个栈来实现队列
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int value;
struct node *pNext;
}Mystack;
typedef struct stack
{
int nCount;
Mystack*pTop;
}Stack;
void Init(Stack**pstack)
{
(*pstack) = (Stack*)malloc(sizeof(Stack));
(*pstack)->nCount = 0;
(*pstack)->pTop = NULL;
}
void Push(Stack*pstack,int num)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
Mystack* pTemp = (Mystack*)malloc(sizeof(Mystack));
pTemp->value = num;
pTemp->pNext = pstack->pTop;
pstack->pTop = pTemp;
}
int Pop(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
if(pstack->pTop == NULL)return -1;
Stack* Del = pstack->pTop;
int nNum = Del->value;
pstack->pTop = pstack->pTop->pNext;
free(Del);
Del = NULL;
return nNum;
}
void Clear(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
while(pstack->nCount != 0)
{
Pop(pstack);
}
}
void Destory(Stack** pstack)
{
Clear(*pstack);
free(*pstack)
*pstack = NULL;
}
int GetCount(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
return pstack->nCount;
}
Stack* GetTop(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
return pstack->pTop;
}
int IsEmpty(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
return pstack->nCount == 0?1:0;
}
typedef struct queue
{
int q_nCount;
Stack* pstack1;
Stack* pstack2;
}Queue;
void q_Init(Queue** pqueue)
{
*pqueue = (Queue*)malloc(sizeof(Queue));
(*pqueue)->q_nCount = 0;
Init(&((*pqueue)->pstack1));
Init(&((*pqueue)->pstack2));
}
void q_Push(Queue*pqueue,int num)
{
if(pqueue == NULL || pqueue->pstack1 == NULL || pqueue->pstack2 == NULL)exit(1);
//栈pstack1进,栈pstack2出
while(pqueue->pstack2->nCount!=0)
{
Push(pqueue->pstack1,Pop(pqueue->pstack2));
}
Push(pqueue->pstack1,num);
pqueue->q_nCount++;
}
int q_Pop(Queue*pqueue)
{
if(pqueue == NULL || pqueue->pstack1 == NULL || pqueue->pstack2 == NULL)exit(1);
while(pqueue->pstack1->nCount!=0)
{
Push(pqueue->pstack2,Pop(pqueue->pstack1));
}
int nNum = Pop(pqueue->pstack2);
pqueue->q_nCount--;
return nNum;
}
int main()
{
Queue*pqueue = NULL;
q_Init(&pqueue);
q_Push(pqueue,1);
q_Push(pqueue,2);
q_Push(pqueue,3);
printf("%d\n",q_Pop(pqueue));
printf("%d\n",q_Pop(pqueue));
printf("%d\n",q_Pop(pqueue));
return 0;
}