结构定义
typedef int QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
//对头和队尾指针
QueuePtr front,rear;
}LinkQueue;
操作函数
//初始化
Status InitQueue(LinkQueue *Q){
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q->front) exit(OVERFLOW);
Q->front->next = NULL;
return OK;
}
//销毁队列
Status DestroyQueue(LinkQueue *Q){
while(Q->front){
Q->rear = Q->front->next;
free(Q->front);
Q->front = Q->rear;
}
return OK;
}
//插入元素e到队尾
Status EnQueue(LinkQueue *Q,QElemType e){
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return OK;
}
//出队列
Status DeQueue(LinkQueue *Q,QElemType *e){
if(Q->front == Q->rear) return ERROR;
QueuePtr p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
//当队列中最后一个元素被删除了,队列尾指针也丢失了
//因此需要对队尾指针重新赋值
if(Q->rear == p) Q->rear = Q->front;
free(p);
return OK;
}
Status OutputQueue(LinkQueue Q){
QueuePtr p = Q.front->next;
while(p){
printf("元素的值是:%d\n",p->data);
p = p->next;
}
}
Main函数
int main() {
LinkQueue Q; //这里的Q是结构体变量
InitQueue(&Q); //&是取址符
int x,i;
QElemType e;
printf("请输入要入队列几个数:");
scanf("%d",&x);
for (i = 0; i < x; ++i) {
printf("请输入要入队列元素值:");
scanf("%d",&e);
EnQueue(&Q,e);
}
DeQueue(&Q,&e);
DeQueue(&Q,&e);
OutputQueue(Q);
return 0;
}
作者:孔维昊
来源:CSDN
原文:https://blog.csdn.net/kh971024/article/details/78081914
版权声明:本文为博主原创文章,转载请附上博文链接!