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

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

相关推荐
千金裘换酒6 小时前
LeetCode 移动零元素 快慢指针
算法·leetcode·职场和发展
方璧6 小时前
限流的算法
java·开发语言
wm10436 小时前
机器学习第二讲 KNN算法
人工智能·算法·机器学习
NAGNIP6 小时前
一文搞懂机器学习线性代数基础知识!
算法
NAGNIP6 小时前
机器学习入门概述一览
算法
Hi_kenyon6 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终6 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
iuu_star7 小时前
C语言数据结构-顺序查找、折半查找
c语言·数据结构·算法
ghie90907 小时前
基于MATLAB GUI的伏安法测电阻实现方案
开发语言·matlab·电阻