#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 10
#define OVERFLLOW 1
#define ERROR 0
#define OK 1
#define STACKINCREMENT 10
#define TURE 1
#define FALSE 0
typedef int elemtype;
typedef struct queue Squ;
struct queue {
elemtype value;
struct queue *rear;
};
Squ *InitQueue()
{
Squ *q;
q=(Squ *)malloc(sizeof(Squ));
if(q == NULL) {
exit(OVERFLLOW);
}
q->rear = NULL;
return q;
}
/*
* clear stack if have clear return ok--1;
*/
int ClearQueue(Squ *q)
{
Squ *p=q;
if( p->rear == NULL ) {
p->value = 0;
return OK;
}
while(p->rear != NULL) {
p->value=0;
p=p->rear;
}
p->value=0;
return OK;
}
/*
* if stack is exist but empty return ture ,else return false;
*/
int EmptyQueue(Squ q)
{
if(q.rear== NULL) {
return FALSE;
} else {
return TURE;
}
}
/*
* if stack is empty StackLength return 0,else return its length;
*/
int QueueLength(Squ q)
{
Squ *p=&q;
int count=0;
if(p->rear == NULL) {
return ERROR;
}
while(p->rear != NULL) {
count++;
p=p->rear;
}
return count;
}
/*
* if stack is exist ,return its top member;
*/
int GetTop(Squ q,elemtype *value)
{
Squ *p=&q;
if(p->rear == NULL) {
return ERROR;
} else {
while(p->rear != NULL) {
p=p->rear;
}
*value=p->value;
return TURE;
}
}
/*
* push member into stack;
*/
int PushQueue(Squ *q,elemtype *value)
{
Squ *p;
p=(Squ *)malloc(sizeof(Squ));
if(p == NULL) {
return ERROR;
} else {
while(q->rear != NULL) {
q=q->rear;
}
q->rear=p;
p->value=*value;
p->rear=NULL;
return TURE;
}
}
/*
* Pop a member from stack,if success return ture,else return false;
*/
int PopQueue(Squ *q,elemtype *value)
{
Squ *p;
if(q->rear == NULL ) {
return ERROR;
} else {
p=q->rear;
*value=p->value;
q->rear=p->rear;
free(p);
return TURE;
}
}
/*
* Destroy the stack,if stack not exist return error,else destroy it
* and return ture;
*/
int DestroyQueue(Squ *q)
{
Squ *p=NULL;
if(q->rear == NULL) {
free(q);
return OK;
}
while(q->rear != NULL) {
p=q->rear;
q=p->rear;
free(p);
}
free(q);
return OK;
}
int main()
{
elemtype value;
Squ *Queue;
int i;
Queue=InitQueue();
/* GetTop(*Queue,&value);
printf("%d/n",value);
printf("the queue length is: %d/n",QueueLength(*Queue));*/
for(i=0;i<5;i++) {
printf("please input value/n");
scanf("%d",&value);
PushQueue(Queue,&value);
GetTop(*Queue,&value);
printf("the top value is:%d/n",value);
printf("the queue length is:%d/n",QueueLength(*Queue));
if(! EmptyQueue(*Queue)){
printf("queue is free/n");
} else {
printf("queue is not free/n");
}
}
//ClearQueue(Queue);
GetTop(*Queue,&value);
printf("value=:%d/n",value);
for(i=0;i<5;i++) {
PopQueue(Queue,&value);
printf("%d/n",value);
// printf("the queue length is=:%d/n",QueueLength(*Queue));
}
if(! EmptyQueue(*Queue)){
printf("queue is free/n");
} else {
printf("queue is not free/n");
}
if(! DestroyQueue(Queue) ) {
printf("destroy queue unsuccess/n");
} else {
printf("destroy queue success/n");
}
return 0;
}