深入解析: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;
        }

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

posted @ 2025-08-03 09:13  yfceshi  阅读(7)  评论(0)    收藏  举报