#include <iostream>
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode, *QNodePtr;
typedef struct {
QNodePtr front, rear;
}Queue, *QueuePtr;
void InitQueue(QueuePtr *q); //初始化
void InsertQueue(QueuePtr *q, ElemType c); //入队
void DeleteQueue(QueuePtr *q, ElemType *c);//出队
void ClearQueue(QueuePtr *q); //销毁队列
int main()
{
char s[256];
QueuePtr *q = (QueuePtr *)malloc(sizeof(QueuePtr));
InitQueue(q);
scanf("%s", s);
int i = 0;
while (s[i] != '\0') {
InsertQueue(q, s[i++]);
}
ClearQueue(q);
return 0;
}
void InitQueue(QueuePtr *q) {
(*q) = (QueuePtr)malloc(sizeof(Queue));
(*q)->front = (*q)->rear = (QNodePtr)malloc(sizeof(QNode)); //头结点
(*q)->front->next = NULL;
}
void InsertQueue(QueuePtr *q, ElemType c) {
QNodePtr qNode = (QNodePtr)malloc(sizeof(QNode));
qNode->data = c;
qNode->next = NULL;
(*q)->rear->next = qNode;
(*q)->rear = qNode;
}
void DeleteQueue(QueuePtr *q, ElemType *c) {
if ((*q)->front == (*q)->rear) {
printf("The Queue is empty\n");
return;
}
QNodePtr headNode = (*q)->front;
QNodePtr firstNode = headNode->next;
*c = firstNode->data;
headNode->next = firstNode->next;
if ((*q)->rear == firstNode) {
(*q)->rear = (*q)->front;
}
free(firstNode);
}
void ClearQueue(QueuePtr *q) {
char c;
while ((*q)->front == (*q)->rear) {
DeleteQueue(q, &c);
printf("%c ", c);
}
}
网友评论