数据结构

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct node
{
    ElemType element; 
    struct node* link;   
}Node;

typedef struct queue
{
    Node* front; //注意front指向表头结点,非头结点,请对视频中提供的代码进行修改
    Node* rear; //指向尾结点
}Queue;

void EnQueue(Queue *Q, ElemType x);     /*出队*/
void DeQueue(Queue *Q);     /*入队*/
void Initialize_Queue(Queue * pQ);  /*初始化队列*/
void traverse(Queue *pS);       /*遍历*/

 int main()
 {
     Queue Q;
     Initialize_Queue(&Q);
     EnQueue(&Q, 1);
     EnQueue(&Q, 2);
     EnQueue(&Q, 3);

     traverse(&Q);

     DeQueue(&Q);

     traverse(&Q);

     DeQueue(&Q);
     DeQueue(&Q);

     traverse(&Q);

     return 0;
 }

 void Initialize_Queue(Queue * pQ)
 {
     pQ->front = (Node *)malloc(sizeof(Node));
     if(NULL == pQ->front)
     {
         printf("动态内存分配失败!\n");
         exit(-1);
     }
     else
     {
        pQ->rear = pQ->front;
        pQ->front->link = NULL;
     }
 }

void EnQueue(Queue *Q, ElemType x)
{
      Node* p= (Node*)malloc(sizeof(Node));
	  p->element = x;
	  p->link = NULL;
	  Q->rear->link=p;
	  Q->rear=p;
     return ;
}

void DeQueue(Queue *Q)
 {     //若队列为空,直接返回
       if(Q->front->link ==NULL)  
       {
            return ; 
       }
       Node *p=Q->front->link;
       Q->front->link=p->link;
       free(p);
        //若出队后,队列为空,则需重置rear
       if(Q->front->link==NULL)
            Q->rear=Q->front;//指向表头结点  
 }

 void traverse(Queue *Q)
{
    Node * p = Q->front->link;
    
    while(p != NULL)
    {
        printf("%d ",p->element);
        p = p->link;
    }
    printf("\n");
    
    return ;
    
运行示例:
————————————————
1 2 3 
2 3 
➜  Desktop 

————————————————
}