本帖最后由 xieglt 于 2021-1-6 20:43 编辑
#include<stdio.h>
#include<stdlib.h>
typedef struct Qnode
{
char data;
struct Qnode *next;
}Qnode, *Qnodep;
typedef struct
{
Qnodep front;
Qnodep rear;
}LinkQueue;
LinkQueue Q;
void InitQueue(LinkQueue &Q)//创建一个空队列!
{
Q.front = Q.rear = (Qnodep)malloc(sizeof(Qnode));
if(!Q.front) exit(-1);//注意程序的严谨性!
//data 没有初始化
Q.front->data = 0;
Q.front->next = NULL;
}
void GetHead(LinkQueue Q, char &ch)//返回队头元素(不为空时)
{
if(Q.front == Q.rear)
{
printf("队列为空!");
return;
}
else
{
ch = Q.front->data;
}
}
void EnQueue(LinkQueue &Q, char ch)//插入元素,生成新的队尾
{
Qnodep node = (Qnodep)malloc(sizeof(Qnode));
//Q.rear->next = (Qnodep)malloc(sizeof(Qnode));
if(!node) exit(-1);//分配空间记得检查!
node->data = ch;
node->next = NULL;
Q.rear->next = node;
Q.rear = node;
}
void DeQueue(LinkQueue &Q, char &ch)//删除一个对头的元素,生成新的对头
{
if(Q.front == Q.rear)
{
printf("队列为空!");
return;
}
//注意队列的头指针是空的
//取第一个元素
Qnodep node = Q.front->next;
ch = node->data;
//断开第一个元素的节点
Q.front->next = node->next;
//只有一个元素了,将对头赋给队尾
if(node == Q.rear)
{
Q.rear = Q.front;
}
//释放内存
free(node);
}
int isempty(LinkQueue Q)
{
if(Q.front == Q.rear)
return 1;
else
return 0;
}
int main()
{
InitQueue(Q);
char ch;
printf("请输入一串字符,以#结尾\n");
scanf("%c", &ch);
while(ch != '#')
{
EnQueue(Q, ch);
scanf("%c", &ch);
}
while(!isempty(Q))
{
DeQueue(Q, ch);
printf("%c", ch);
}
free(Q.front);
return 0;
}
|