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

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

相关推荐
_OP_CHEN14 分钟前
数据结构(C语言篇):(十三)堆的应用
c语言·数据结构·二叉树·学习笔记·堆排序··top-k问题
郝学胜-神的一滴23 分钟前
深入探索 C++ 元组:从基础到高级应用
开发语言·c++·stl·软件工程
I'm a winner24 分钟前
第七章:AI进阶之------输入与输出函数(一)
开发语言·人工智能·python·深度学习·神经网络·microsoft·机器学习
木心操作32 分钟前
js生成excel表格进阶版
开发语言·javascript·ecmascript
听情歌落俗1 小时前
MATLAB3-1变量-台大郭彦甫
开发语言·笔记·算法·matlab·矩阵
量子炒饭大师1 小时前
收集飞花令碎片——C语言关键字typedef
c语言·c++·算法
澡点睡觉1 小时前
【数据结构与算法Trip第4站】摩尔投票法
算法
cellurw1 小时前
Linux下C语言实现HTTP+SQLite3电子元器件查询系统
linux·c语言·http
zhangfeng11331 小时前
在 R 语言里,`$` 只有一个作用 按名字提取“列表型”对象里的单个元素 对象 $ 名字
开发语言·windows·r语言
文弱书生6562 小时前
5.后台运行设置和包设计与实现
服务器·开发语言·c#