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