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;
}

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

相关推荐
Cx330❀1 分钟前
深入浅出 Qt 绘图机制:从 QPainter 到四大图像类解析
开发语言·qt·ui·性能优化·图形渲染
淡海水5 分钟前
05-02-源码-Boehm GC标记阶段
算法·unity·c#·游戏引擎·gc
信可维13 分钟前
AI 读 Word 表格总读错?先查合并单元格和表头这 3 处
开发语言·人工智能·c#·word·软件工程
Code_Solitude35 分钟前
传智杯备赛代码整理(前4题)
数据结构·算法
HEJOO940 分钟前
Java 并发运行中的安全问题详解
java·开发语言
星夜离尘561 小时前
MATLAB阶跃响应怎么量:别把最后一个采样点当成稳态
开发语言·matlab
水饺编程1 小时前
第2章:Linux 基础,rm 命令
linux·c语言·汇编
Jasmine_llq1 小时前
《P8816 [CSP-J 2022] 上升点列》
数据结构·算法·贪心·排序·二维动态规划 dp·类背包状态转移
hetao17338371 小时前
2026-10-19 hetao1733837 的刷题记录
c++·算法
夏虫不可与之言冰1 小时前
第三课 点亮 LED 与定时器非阻塞闪烁
c语言·c++·vscode·单片机·嵌入式硬件·物联网