注意:创建的时候申请两次内存,释放的时候也要释放两次。队尾插入,队头删除。
完成任务,看看就好,嘻嘻嘻!
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef int dataType;
typedef struct node
{
dataType data;
struct node *next;
} node;
typedef struct linkQueue
{
node *front;
node *rear;
int size;
} linkQueue;
linkQueue *init_linkQueue(void)
{
linkQueue *lq = malloc(sizeof(linkQueue));
if (lq == NULL)
{
return NULL;
}
lq->front = NULL;
lq->rear = NULL;
lq->size = 0;
return lq;
}
node *init_node(dataType data)
{
node *pnew = malloc(sizeof(node));
if (pnew == NULL)
{
return NULL;
}
pnew->data = data;
pnew->next = NULL;
return pnew;
}
bool isEmpty(linkQueue *lq)
{
return lq->size == 0;
}
bool enQueue(linkQueue *lq, dataType data)
{
node *pnew = init_node(data);
if (pnew == NULL)
{
return false;
}
if (isEmpty(lq))
{
lq->front = pnew;
lq->rear = pnew;
lq->size++;
}
else
{
lq->rear->next = pnew;
lq->rear = pnew;
lq->size++;
}
return true;
}
bool get_front(linkQueue *lq, dataType *data)
{
if (isEmpty(lq))
{
return false;
}
*data = lq->front->data;
return true;
}
bool out_Queue(linkQueue *lq, dataType *data)
{
if (!get_front(lq, data))
{
return false;
}
if (lq->size == 1)
{
free(lq->front);
lq->front = NULL;
lq->rear = NULL;
}
else
{
node *temp = lq->front;
lq->front = lq->front->next;
temp->next = NULL;
free(temp);
}
lq->size--;
return true;
}
void show(linkQueue *lq)
{
node *p = lq->front;
dataType num = 0;
printf("当前队列:");
for (; num < lq->size;num++, p = p->next)
{
printf("%d\t", p->data);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
linkQueue *lq = init_linkQueue();
if (lq == NULL)
{
return -1;
}
// enQueue(lq, 1);
// enQueue(lq, 2);
// enQueue(lq, 3);
// dataType data;
// while (1)
// {
// if (!out_Queue(lq, &data))
// {
// printf("队列为空\n");
// break;
// }
// printf("%d\n", data);
// }
while (1)
{
dataType data;
if (scanf("%d", &data) == 0)
{
while (getchar() != '\n')
{
if (isEmpty(lq))
{
printf("队列为空\n");
break;
}
out_Queue(lq, &data);
printf("%d\n", data);
}
}
else
{
enQueue(lq, data);
}
show(lq);
}
return 0;
}