main
Your Name 6 months ago
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…
Cancel
Save