C/C++ 数据结构 - 队列

1.队列

https://blog.csdn.net/LiuBo_01/article/details/80412290

1 #include 
  2 #include 
  3 
  4 typedef struct Node
  5 {
  6     int data;
  7     struct Node* next;
  8 }N;
  9 
 10 typedef struct
 11 {
 12     N* front;
 13     N* rear;
 14 }Q;
 15 
 16 //初始化队列
 17 void Init(Q* q)
 18 {
 19     //创建一个头结点
 20     N* n = (N*)malloc(sizeof(N));
 21     q->front = q->rear = n; //队头和队尾指向头结点
 22     q->front->next = NULL;
 23 }
 24 
 25 //判断队列是否为空
 26 int IsEmpty(Q* q)
 27 {
 28     if (q->front->next == NULL)
 29     {
 30         return 1;
 31     }
 32     return 0;
 33 }
 34 
 35 //入队操作
 36 void Enter(Q* q, int data)
 37 {
 38     //创建一个新结点
 39     N* n = (N*)malloc(sizeof(N));
 40     n->data = data;  //将数据元素赋值给结点的数据域
 41     n->next = NULL;  //将结点的指针域置空
 42     q->rear->next = n;   //将原来队列的队尾指针指向新结点
 43     q->rear = n;      //将队尾指针指向新结点
 44 }
 45 
 46 //出队操作
 47 void Delete(Q* q,int* data)
 48 {
 49     if (IsEmpty(q))
 50     {
 51         printf("队列为空!\n");
 52         return;
 53     }
 54     //pDel指向队头元素,由于队头指针front指向头结点,所以pDel指向头结点的下一个结点
 55     N* n = q->front->next;
 56     *data = n->data;   //将要出队的元素赋给data
 57     q->front->next = n->next;  //使指向头结点的指针指向pDel的下一个结点
 58     //如果队列中只有一个元素,将队列置空
 59     if (q->rear = n)
 60     {
 61         q->rear = q->front;
 62     }
 63     free(n);   //释放pDel指向的空间
 64 }
 65 
 66 //取队头元素
 67 int GetHead(Q* q, int* data)
 68 {
 69     if (IsEmpty(q))
 70     {
 71         printf("队列为空!\n");
 72         return 0;
 73     }
 74     N* n;
 75     n = q->front->next;  //pCur指向队列的第一个元素,即头结点的下一个结点
 76     *data = n->data;      //将队头元素值赋给data
 77     return *data;             //返回队头元素值
 78 }
 79 
 80 //打印队列中的元素
 81 void Print(Q* q)
 82 {
 83     N* n;
 84     n = q->front->next;
 85     while (n)
 86     {
 87         printf("%d ", n->data);
 88         n = n->next;
 89     }
 90     printf("\n");
 91 }
 92 
 93 int main()
 94 {
 95     Q q;
 96     int x;
 97     Init(&q);
 98     Enter(&q,1);
 99     Enter(&q,2);
100     Enter(&q,3);
101     Enter(&q,4);
102     Print(&q);
103     Delete(&q,&x);
104     printf("%d\n",x);
105     GetHead(&q,&x);
106     printf("%d\n",x);
107     Print(&q);
108 
109     return 0;
110 }

你可能感兴趣的:(面试,c语言)