数据结构
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType element;
struct node* link;
}Node;
typedef struct queue
{
Node* front; //注意front指向表头结点,非头结点,请对视频中提供的代码进行修改
Node* rear; //指向尾结点
}Queue;
void EnQueue(Queue *Q, ElemType x); /*出队*/
void DeQueue(Queue *Q); /*入队*/
void Initialize_Queue(Queue * pQ); /*初始化队列*/
void traverse(Queue *pS); /*遍历*/
int main()
{
Queue Q;
Initialize_Queue(&Q);
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
traverse(&Q);
DeQueue(&Q);
traverse(&Q);
DeQueue(&Q);
DeQueue(&Q);
traverse(&Q);
return 0;
}
void Initialize_Queue(Queue * pQ)
{
pQ->front = (Node *)malloc(sizeof(Node));
if(NULL == pQ->front)
{
printf("动态内存分配失败!\n");
exit(-1);
}
else
{
pQ->rear = pQ->front;
pQ->front->link = NULL;
}
}
void EnQueue(Queue *Q, ElemType x)
{
Node* p= (Node*)malloc(sizeof(Node));
p->element = x;
p->link = NULL;
Q->rear->link=p;
Q->rear=p;
return ;
}
void DeQueue(Queue *Q)
{ //若队列为空,直接返回
if(Q->front->link ==NULL)
{
return ;
}
Node *p=Q->front->link;
Q->front->link=p->link;
free(p);
//若出队后,队列为空,则需重置rear
if(Q->front->link==NULL)
Q->rear=Q->front;//指向表头结点
}
void traverse(Queue *Q)
{
Node * p = Q->front->link;
while(p != NULL)
{
printf("%d ",p->element);
p = p->link;
}
printf("\n");
return ;
运行示例:
————————————————
1 2 3
2 3
➜ Desktop
————————————————
}