#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct QNode
{
ElemType data;//定义队列中的元素
struct QNode *next;
}QNode;
typedef struct LinkQueue
{
QNode *front;
QNode *rear;
}LinkQueue;//定义一个队列,队列只有一个头指针和一个尾指针
//队列的初始化
void InitQueue(LinkQueue *q)
{
q->front = (LinkQueue*)malloc(sizeof(QNode));
if(!q->front)
{
exit(0);
}
q->rear = q->front;
q->front->next = NULL;
}
//队列的插入
void InsertQueue(LinkQueue *p,ElemType *e)
//队列为p,要插入的元素为e,队列的rear指针指向队列的最后一个元素。队列的front指针指向头结点,头结点无元素
{
QNode *ptr;
ptr = (LinkQueue*)malloc(sizeof(QNode));
ptr->data = *e;
ptr->next = NULL;
p->rear->next = ptr;
// p->rear = p->rear->next;
p->rear = ptr;
}
//队列的删除
void DeleteQueue(LinkQueue *p,ElemType *e)
{
QNode *s;
if(p->front == p->rear)
{
return;
}
s = p->front->next;
*e = s->data;
p->front->next = s->next;
// if(s == p->rear)
if(p->front->next == NULL)//用这条也可以是等价的
{
p->front = p->rear;
}
free(s);
}
//销毁一个队列
void DestoryQueue(LinkQueue *p)
{
while(p->front)
{
p->rear = p->front->next;//p->front->next == NULL
free(p->front);//释放p的头结点
p->front = p->rear;//把p的front和rear都置为NULL
}
}
int main()
{
int i;
LinkQueue p;
ElemType e;
InitQueue(&p);
for(i = 1;i <= 10;i++)
{
InsertQueue(&p,&i);
}
for(i = 1;i <= 10;i++)
{
DeleteQueue(&p,&e);
printf("%2d",e);
}
return 0;
}
输入一个字符串以字符'#'结束,在屏幕上打印出来
#include <stdio.h>
#include <stdlib.h>
#define M 100
#define ElemType char
typedef struct QNode
{
ElemType data;//定义队列中的元素
struct QNode *next;
}QNode;
typedef struct LinkQueue
{
QNode *front;
QNode *rear;
}LinkQueue;//定义一个队列,队列只有一个头指针和一个尾指针
//队列的初始化
void InitQueue(LinkQueue *q)
{
q->front = (LinkQueue*)malloc(sizeof(QNode));
if(!q->front)
{
exit(0);
}
q->rear = q->front;
q->front->next = NULL;
}
//队列的插入
void InsertQueue(LinkQueue *p,ElemType *e)
//队列为p,要插入的元素为e,队列的rear指针指向队列的最后一个元素。队列的front指针指向头结点,头结点无元素
{
QNode *ptr;
ptr = (LinkQueue*)malloc(sizeof(QNode));
ptr->data = *e;
ptr->next = NULL;
p->rear->next = ptr;
// p->rear = p->rear->next;
p->rear = ptr;
}
//队列的删除
void DeleteQueue(LinkQueue *p,ElemType *e)
{
QNode *s;
if(p->front == p->rear)
{
return;
}
s = p->front->next;
*e = s->data;
p->front->next = s->next;
// if(s == p->rear)
if(p->front->next == NULL)//用这条也可以是等价的
{
p->front = p->rear;
}
free(s);
}
//销毁一个队列
void DestoryQueue(LinkQueue *p)
{
while(p->front)
{
p->rear = p->front->next;//p->front->next == NULL
free(p->front);//释放p的头结点
p->front = p->rear;//把p的front和rear都置为NULL
}
}
int main()
{
int i,len = 0;
LinkQueue p;
ElemType e;
char c;
InitQueue(&p);
printf("输入字符串:\n");
scanf("%c",&c);
while(c != '#')
{
InsertQueue(&p,&c);
len++;
scanf("%c",&c);
}
printf("字符串为:\n");
for(i = 1;i <= len;i++)
{
DeleteQueue(&p,&e);
printf("%c",e);
}
return 0;
}