c语言创建的一个队列结构(含有这个头指针和这个尾指针的结构具有一定的参考价值)

c 复制代码
//
// Created by Administrator on 2025/8/1.
//
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

typedef struct  DequeNode{
    int data;
    struct DequeNode * next;
}DequeNode;

typedef struct  DequeList{
    DequeNode  * front ;
    DequeNode  * rear;
}DequeList,*DequePtr;

void InitDequeList(DequePtr pDequePtr){
    if(!pDequePtr)
    {
        return ;
    }
    pDequePtr->front=pDequePtr->rear=  (DequeNode *) malloc(sizeof(DequeNode));
    pDequePtr->front->data = -1;
    pDequePtr->front->next = NULL;
}

void InsertDeque(DequePtr pDequePtr,int data){
    if(!pDequePtr||!pDequePtr->front)
    {
        return ;
    }
    DequeNode * p = (DequeNode *) malloc(sizeof(DequeNode));
    p->data = data;
    p->next = NULL;
    DequeNode * temp = pDequePtr->front;
    while(temp->next)
    {
        temp = temp->next;
    }
    temp->next = p ;
    pDequePtr->rear=p;
}


void TraverseDeque(DequePtr pDequePtr)
{
    if(!pDequePtr||!pDequePtr->front||!pDequePtr->front->next)
    {
        return ;
    }
    DequeNode* temp =   pDequePtr->front->next;
    while(temp)
    {
        printf("%d ",temp->data);
        temp = temp->next;
    }
}


void PopDeque(DequePtr pDequePtr)
{
    if(!pDequePtr||!pDequePtr->front||!pDequePtr->front->next)
    {
        return ;
    }
    DequeNode* temp = pDequePtr->front->next;
    pDequePtr->front->next=temp->next;
    free(temp);
}


int GetTopParameter(DequePtr pDequePtr)
{
    if(!pDequePtr||!pDequePtr->front||!pDequePtr->front->next)
    {
        return -1;
    }
    return pDequePtr->front->next->data;
}


int SizeDqueue(DequePtr pDequePtr)
{
    if(!pDequePtr||!pDequePtr->front||!pDequePtr->front->next)
    {
        return 0;
    }
    int count=0;
    DequeNode* temp = pDequePtr->front->next;
            while(temp)
            {

                temp=temp->next;
                count++;
            }
            return count;
}



void ClearDqueue(DequePtr *pDequePtr) {
    if (!*pDequePtr || !(*pDequePtr)->front||!(*pDequePtr)->front->next) {
        return;
    }

    DequeNode *current = (*pDequePtr)->front->next;
    while (current) {
        DequeNode *next = current->next;
        free(current);
        current = next;
    }

    (*pDequePtr)->front->next = NULL;
    (*pDequePtr)->rear = (*pDequePtr)->front;
}


void DestroyDeque(DequePtr *pDequePtr) {
    if (!pDequePtr || !*pDequePtr) {
        return;
    }
    ClearDqueue(pDequePtr);
    if ((*pDequePtr)->front) {
        free((*pDequePtr)->front);
    }
    free(*pDequePtr);
    *pDequePtr = NULL;
}

int main()
{
    DequePtr pDequePtr = (DequePtr) malloc(sizeof(DequeList ));
    InitDequeList(pDequePtr);
    for (int i = 0; i < 10; ++i) {
        InsertDeque(pDequePtr,i);
    }
    TraverseDeque(pDequePtr);
    printf("\n %d %d\n",GetTopParameter(pDequePtr),SizeDqueue(pDequePtr));
    PopDeque(pDequePtr);
    printf("%d %d\n",GetTopParameter(pDequePtr),SizeDqueue(pDequePtr));
    PopDeque(pDequePtr);
    printf("%d  %d\n",GetTopParameter(pDequePtr),SizeDqueue(pDequePtr));
    TraverseDeque(pDequePtr);
    ClearDqueue(&pDequePtr);
    system("pause");
    return 0;
}

有问题请及时留言谢谢!!!

相关推荐
Highcharts.js5 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
头发还在的女程序员7 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
拳里剑气8 小时前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先
爱写代码的小朋友9 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
果汁华9 小时前
Function Calling 与 Python 实战完整指南
开发语言·网络·python
小小晓.9 小时前
C++:语句和作用域
开发语言·c++
wanderist.10 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
稚南城才子,乌衣巷风流10 小时前
支配树(Dominator Tree)详解:概念、算法与应用
算法
海天鹰11 小时前
PHP上传文件
android·开发语言·php