parent
ccadc11d7f
commit
cd3336844a
@ -1,162 +0,0 @@
|
||||
#include"stdio.h"
|
||||
#include"stdlib.h"
|
||||
typedef int QueueElem;
|
||||
|
||||
// 队列结点类型
|
||||
typedef struct linkQueueNode
|
||||
{
|
||||
QueueElem data;
|
||||
struct linkQueueNode *next;
|
||||
}LinkQueueNode;
|
||||
|
||||
// 队列
|
||||
typedef struct linkQueue
|
||||
{
|
||||
LinkQueueNode *front; // 队头指针
|
||||
LinkQueueNode *rear; // 队尾指针
|
||||
int QueueLen; // 队列长度
|
||||
}LinkQueue;
|
||||
|
||||
// 1. 初始化一个队列
|
||||
LinkQueue *initQueue()
|
||||
{
|
||||
LinkQueue *queue = (LinkQueue* )malloc(sizeof(LinkQueue));
|
||||
queue->front = queue->rear = NULL;
|
||||
queue->QueueLen = 0;
|
||||
|
||||
return queue;
|
||||
}
|
||||
|
||||
// 2. 入队
|
||||
int enterQueue(LinkQueue *Queue, QueueElem data)
|
||||
{
|
||||
// 申请一个队列元素空间z
|
||||
LinkQueueNode *QNode = (LinkQueueNode* )malloc(sizeof(LinkQueueNode));
|
||||
if ( QNode == NULL )
|
||||
return -1; //入队失败
|
||||
QNode->data = data;
|
||||
QNode->next = NULL;
|
||||
|
||||
// 入队 -- 尾插
|
||||
// 队列为空
|
||||
if ( Queue->rear == NULL )
|
||||
Queue->front = Queue->rear = QNode;
|
||||
else
|
||||
{
|
||||
Queue->rear->next = QNode;
|
||||
Queue->rear = QNode;
|
||||
}
|
||||
|
||||
Queue->QueueLen++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 5. 判断队列是否为空
|
||||
int QueueIsEmpty(LinkQueue *Queue)
|
||||
{
|
||||
return Queue->QueueLen;
|
||||
}
|
||||
//#define QueueLen(Queue) QueueIsEmpty(Queue)
|
||||
|
||||
// 3. 出队
|
||||
QueueElem delQueue(LinkQueue *Queue)
|
||||
{
|
||||
// 如果队列不为空
|
||||
if ( QueueIsEmpty(Queue) )
|
||||
{
|
||||
// 摘除头部结点
|
||||
LinkQueueNode *p = Queue->front;
|
||||
Queue->front = Queue->front->next;
|
||||
p->next = NULL;
|
||||
|
||||
// 如果只有一个结点
|
||||
Queue->rear = Queue->front ? Queue->rear : NULL;
|
||||
|
||||
// 保留结点的数据域 释放掉结点
|
||||
QueueElem data = p->data;
|
||||
// Queue->front->next->data = p->front->data;
|
||||
free(p);
|
||||
|
||||
Queue->QueueLen--;
|
||||
//free(p);
|
||||
return data;
|
||||
}
|
||||
|
||||
return -1; // 出队失败
|
||||
}
|
||||
|
||||
// 4. 获取队头元素
|
||||
QueueElem getFront(LinkQueue *Queue)
|
||||
{
|
||||
|
||||
// 如果队列不为空
|
||||
if ( QueueIsEmpty(Queue) )
|
||||
return Queue->front->data;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
//#define QueueLen(Queue) QueueIsEmpty(Queue)
|
||||
// 6. 获取队列长度
|
||||
int QueueLen(LinkQueue *Queue)
|
||||
{
|
||||
return Queue->QueueLen;
|
||||
}
|
||||
|
||||
// 7. 清空一个队列 --- 不断地出队
|
||||
void clearQueue(LinkQueue *Queue)
|
||||
{
|
||||
while ( QueueIsEmpty(Queue) )
|
||||
delQueue(Queue);
|
||||
}
|
||||
|
||||
// 8. 销毁一个队列
|
||||
void destoryQueue(LinkQueue **Queue)
|
||||
{
|
||||
clearQueue(*Queue);
|
||||
free(*Queue);
|
||||
*Queue = NULL;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
QueueElem x;
|
||||
|
||||
LinkQueue *Queue = initQueue();
|
||||
|
||||
// 不断入队
|
||||
while(1)
|
||||
{
|
||||
scanf("%d", &x);
|
||||
if ( x == 0 )
|
||||
{
|
||||
printf("input finsh\n");
|
||||
break;
|
||||
}
|
||||
|
||||
// 如果入队列失败 直接退出程序
|
||||
if ( enterQueue(Queue, x) == -1 )
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
// 输出队列元素
|
||||
printf ("Front Elem: %d QueueLen: %d\n", getFront(Queue), QueueLen(Queue));
|
||||
|
||||
// 如果队列不为空 就不断出队
|
||||
while ( QueueIsEmpty(Queue) )
|
||||
printf("%d ", delQueue(Queue));
|
||||
printf("\n");
|
||||
|
||||
enterQueue(Queue, 1);
|
||||
enterQueue(Queue, 2);
|
||||
|
||||
printf ("Front Elem: %d\n", getFront(Queue));
|
||||
|
||||
// 销毁队列 并且将实参指向NULL
|
||||
destoryQueue(&Queue);
|
||||
if ( Queue == NULL )
|
||||
printf("Destory Finsh\n");
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue