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

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

相关推荐
qq_401700412 小时前
嵌入式用Unix时间的优势及其C语言转换
服务器·c语言·unix
mit6.8244 小时前
bfs|栈
算法
tobebetter95274 小时前
How to manage python versions on windows
开发语言·windows·python
9***P3345 小时前
PHP代码覆盖率
开发语言·php·代码覆盖率
CoderYanger5 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz6 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
稚辉君.MCA_P8_Java6 小时前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
多多*6 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
p***43486 小时前
Rust网络编程模型
开发语言·网络·rust
ᐇ9596 小时前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐