#include <stdio.h>
#include <stdlib.h>
/**< 链式队列 */
/**< 定义结点 */
struct QNode
{
int data;
struct QNode* next;
};
/**< 定义队列结构体 */
struct Queue
{
struct QNode* front;
struct QNode* rear;
int len;
}Queue;
/**< 初始化队列 */
void Init_QUEUE(struct Queue* q)///声明变量的时候已经初始化,声明指针的时候为野指针,必须首先初始化。
{
q->front=q->rear=(struct QNode*)malloc(sizeof(struct QNode));///一定要malloc不能定义结点p,否则随着函数结束p还给堆下次还可能从堆上分配同样的地址。
q->front->next=NULL;
q->len=0;
}
/**< 销毁队列 */
void Destroy_QUEUE()
{
}
/**< 队列判空 */
int IsEmpty_QUEUE(struct Queue* q)
{
if(q->front==q->rear)
return 1;
else return 0;
}
/**< 入队操作 */
void En_QUEUE(struct Queue* q,int Val)
{
struct QNode *p=malloc(sizeof(struct QNode));
p->data=Val;
q->rear->next=p;
q->rear=q->rear->next;
//printf("p=%o\t",p);
//printf("first=%o\t",q->front->next);
//printf("rear=%o\t",q->rear);
//printf("\n");
q->len++;
}
/**< 出队操作 */
void Out_QUEUE(struct Queue* q)
{
struct QNode* p=q->front->next;
q->front->next=q->front->next->next;
free(p);
q->len--;
}
/**< 取队首元素 */
int GetFront_QUEUE(struct Queue* q)
{
int n=q->front->next->data;
if(!IsEmpty_QUEUE(q))
{
printf("%d\n",q->front->next->data);
return n;
}
else return 0;
}
/**< 测试代码 */
int main()
{
struct Queue q;
Init_QUEUE(&q);
En_QUEUE(&q,1);
En_QUEUE(&q,2);
En_QUEUE(&q,3);
En_QUEUE(&q,4);
GetFront_QUEUE(&q);
Out_QUEUE(&q);
GetFront_QUEUE(&q);
Out_QUEUE(&q);
GetFront_QUEUE(&q);
printf("Hello world!\n");
return 0;
}
链式队列ADT改 (C语言)2018.3.14
最新推荐文章于 2022-02-13 13:31:23 发布