队列的链式实现
主要内容:
(1)初始化队列,要求得到一个空队列;
(2) 入队操作,将一个元素放入队列中;
(3) 出队操作,将元素从队列中删除;
(4) 销毁队列。
代码实现:
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
struct queue{
struct node *front;
struct node *rear;
}s;
struct queue *creat(struct queue *s); //创建队
void enQuene(struct queue *s,int e); //入队
void deQuene(struct queue *s); //出队
void print(struct queue *s); //输出打印
void DestroyQueue(struct queue *s); //销毁队
int main()
{
struct queue *s;
s=creat(s);
printf("入队元素:");
enQuene(s,65);
enQuene(s,52);
enQuene(s,2);
enQuene(s,96);
print(s);
printf("\n");
printf("插入元素后:");
enQuene(s,5);
print(s);
printf("\n");
printf("出队后:");
deQuene(s);
print(s);
DestroyQueue(s);
}
struct queue *creat(struct queue *s)
{
s=(struct queue *)malloc(sizeof(struct queue));
s->front=s->rear=(struct node *)malloc(sizeof(struct node));
s->front->next=NULL;
s->rear->next=NULL;
return s;
}
void enQuene(struct queue *s,int e)
{
struct node *p;
p=(struct node *)malloc(sizeof(struct node));
p->data=e;
p->next=NULL;
s->rear->next=p;
s->rear=p;
}
void deQuene(struct queue *s)
{
struct node *p;
p=s->front->next;
s->front->next=p->next;
if(s->rear==p)
{
s->rear=s->front;
free(p);
}
if(s->front==s->rear) exit(0);
}
void print(struct queue *s)
{
struct node *p = s->front->next;
while(p!=s->rear->next)
{
printf("%4d",p->data);
p=p->next;
}
}
void DestroyQueue(struct queue *s)
{
while(s->front!=NULL)
{
s->rear=s->front->next;
free(s->front);
s->front=s->rear;
}
}