c实现队列

    xiaoxiao2021-03-25  108

    今天应要求补充了很多注释,没问题很容易看懂,我还加了实现原理图,so easy,妈妈再也不用担心你的学习了!ok

    队列:先进先出,只能实现尾插,头删

    如下图:

    // main.c // 队列 // Created by fzl // Copyright © All rights reserved. #include <stdio.h> #include <stdlib.h> typedef struct Person { int age; char name[20]; }Person; typedef struct LINK { Person data; struct LINK *next; }LINK,*pLINK; typedef struct Queue { pLINK first;//头指针(指向第一个节点) pLINK rear;//尾指针(指向最后一个节点) }Queue,*pQueue; /** 创建队列 */ pQueue createQueue(pQueue queueHead) { if(queueHead==NULL) { queueHead=(pQueue)malloc(sizeof(Queue));//在堆区开辟内存 queueHead->first=NULL; queueHead->rear=NULL; } return queueHead; } Person getData() { Person person; printf("请输入这个人的信息[age name]:"); scanf("%d%s",&person.age,person.name); return person; } /** * 插入数据 */ void insertData(pQueue queueHead) { pLINK p=(pLINK)malloc(sizeof(LINK)); p->data=getData(); if(queueHead->first==NULL) { //说明插入的数据为第一个 queueHead->first=p; queueHead->rear=p; } else//不为第一个(用rear找出最后一个) { queueHead->rear->next=p;//将新节点插入 queueHead->rear=p;//将尾指针指向最后一个 } } void printData(pQueue queueHead) { if(queueHead->first==NULL) { printf("无信息可打印\n"); return; } pLINK temp; printf("first-->"); for (temp=queueHead->first; temp!=queueHead->rear; temp=temp->next) { printf("[%d %s]--->",temp->data.age,temp->data.name); } printf("[%d %s]<----rear\n",queueHead->rear->data.age,queueHead->rear->data.name); } void deleteData(pQueue queueHead) { if(queueHead->first==NULL) { printf("无信息可删除\n"); return; } if(queueHead->first==queueHead->rear)//说明只有一个节点 { free(queueHead->first); queueHead->first=NULL; queueHead->rear=NULL; } else//说明不止一个节点 { pLINK current=queueHead->first;//找出第一个 queueHead->first=current->next;//将first指向第二个节点 free(current);//删除第一个节点 } //此处必须注意:队列是先进先出,所以只能头删尾插 } int main() { pQueue queueHead=NULL; queueHead=createQueue(queueHead); insertData(queueHead); insertData(queueHead); insertData(queueHead); printData(queueHead); deleteData(queueHead); printData(queueHead); deleteData(queueHead); printData(queueHead); deleteData(queueHead); printData(queueHead); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-6418.html

    最新回复(0)