/*
**一个用链表形式实现的队列,它没有长度限制
*/
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <string.h>
#define QUEUE_TYPE char
typedef struct QUEUE_NODE
{
QUEUE_TYPE value;
struct QUEUE_NODE *next;
}QueueNode;
typedef struct QUEUE
{
QueueNode *head;
QueueNode *tail;
}Queue;
int EnQueue(Queue *queue,QUEUE_TYPE node_value)
{
QueueNode *node;
if(queue==NULL)
return -1;
node= malloc(sizeof(QueueNode));
node->value = node_value;
node->next=NULL;
if(queue->tail==NULL)
queue->head=node;
else
queue->tail->next=node;
queue->tail=node;
return 0;
}
/*
* out queue implement
*/
QUEUE_TYPE DeQueue(Queue *queue)
{
QueueNode *temp;
QUEUE_TYPE node_value;
if(queue==NULL)
return -1;
if(queue->head == NULL)
{
return -1;
}
else
{
temp = queue->head;
node_value = temp->value;
queue->head=temp->next;
free(temp);
if(queue->head == NULL)
queue->tail=NULL;
}
return node_value;
}
/*
* initial queue implement
*/
int InitQueue(Queue *queue)
{
if(queue==NULL)
return -1;
queue->head=NULL;
queue->tail=NULL;
return 0;
}
/*
* delete queue implement
*/
int DestoryQueue(Queue *queue)
{
if(queue==NULL)
return -1;
while(queue->head!=NULL)
{
QueueNode *temp=queue->head;
queue->head=temp->next;
free(temp);
}
queue->tail=NULL;
return 0;
}
/*
**测试队列用函数,输入数据,入队,然后出队并打印。
*/
int main()
{
char a[256],len,i,ch;
Queue queue;
InitQueue(&queue); //初始化队列
printf("请输入将入栈字符:\n");
gets(a);
len = strlen(a);
for(i = 0; i < len; i++)
EnQueue(&queue,a[i]);
for(i = 0;i < len; i++)
{
ch = DeQueue(&queue);
printf("%c",ch);
}
printf("\n");
return 0;
}