队列的顺序存储实现

顺序存储队列头文件:

 1 #pragma once
 2 #include<stdlib.h>
 3 #include<stdio.h>
 4 #define MAX_SIZE 1024
 5 
 6 //顺序队列结构体
 7 typedef struct SEQQUEUE
 8 {
 9     void *data[MAX_SIZE];
10     int size;
11 }SeqQueue;
12 
13 //初始化队列
14 SeqQueue* Init_SeqQueue();
15 //入队
16 void Push_SeqQueue(SeqQueue* queue, void* value);
17 //出队
18 void Pop_SeqQueue(SeqQueue* queue);
19 //返回队首元素
20 void* Front_SeqQueue(SeqQueue* queue);
21 //返回队尾元素
22 void* Back_SeqQueue(SeqQueue* queue);
23 //返回队列长度
24 int Size_SeqQueue(SeqQueue* queue);
25 //清空队列
26 void Clear_SeqQueue(SeqQueue* queue);
27 //销毁队列
28 void Free_SeqQueue(SeqQueue* queue);

 

顺序存储队列实现文件:

  1 #include "队列顺序存储.h"
  2 //初始化队列
  3 SeqQueue* Init_SeqQueue()
  4 {
  5     SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue));
  6     if (queue == NULL)
  7     {
  8         exit(1);
  9     }
 10 
 11     queue->size = 0;
 12     for (int i = 0; i < MAX_SIZE; ++i)
 13     {
 14         queue->data[i] = NULL;
 15     }
 16 
 17     return queue;
 18 }
 19 //入队数组左边做队头
 20 void Push_SeqQueue(SeqQueue* queue, void* value)
 21 {
 22     if (queue == NULL)
 23     {
 24         exit(1);
 25     }
 26 
 27     if (value == NULL)
 28     {
 29         exit(1);
 30     }
 31 
 32     if (queue->size == MAX_SIZE)
 33     {
 34         exit(1);
 35     }
 36 
 37     queue->data[queue->size] = value;
 38     queue->size++;
 39 }
 40 //出队
 41 void Pop_SeqQueue(SeqQueue* queue)
 42 {
 43     if (queue == NULL)
 44     {
 45         exit(1);
 46     }
 47 
 48     if (queue->size == 0)
 49     {
 50         exit(1);
 51     }
 52 
 53     for (int i = 0; i < queue->size-1; ++i)
 54     {
 55         queue->data[i] = queue->data[i + 1];
 56     }
 57     queue->size--;
 58 }
 59 //返回队首元素
 60 void* Front_SeqQueue(SeqQueue* queue)
 61 {
 62     if (queue == NULL)
 63     {
 64         exit(1);
 65     }
 66 
 67     if (queue->size == 0)
 68     {
 69         exit(1);
 70     }
 71 
 72     return queue->data[0];
 73 }
 74 //返回队尾元素
 75 void* Back_SeqQueue(SeqQueue* queue);
 76 //返回队列长度
 77 int Size_SeqQueue(SeqQueue* queue)
 78 {
 79     if (queue == NULL)
 80     {
 81         exit(1);
 82     }
 83 
 84     return queue->size;
 85 }
 86 //清空队列
 87 void Clear_SeqQueue(SeqQueue* queue)
 88 {
 89     if (queue == NULL)
 90     {
 91         exit(1);
 92     }
 93 
 94     queue->size = 0;
 95 }
 96 //销毁队列
 97 void Free_SeqQueue(SeqQueue* queue)
 98 {
 99     if (queue == NULL)
100     {
101         exit(1);
102     }
103     
104     for (int i = 0; i < MAX_SIZE; ++i)
105     {
106         queue->data[i] = NULL;
107     }
108     queue->size = 0;
109     free(queue);
110     
111 }

顺序存储队列测试文件:

 1 #include"队列顺序存储.h"
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<stdio.h>
 5 
 6 #define M 8
 7 #define N 3
 8 //数据元素结构体
 9 typedef struct PERSON
10 {
11     char name[64];
12     int age;
13 }Person;
14 
15 int main()
16 {
17     //创建循环链表
18     SeqQueue* queue = Init_SeqQueue();
19 
20     //创建数据
21     Person p1 = { "aaa",10 };
22     Person p2 = { "bbb",20 };
23     Person p3 = { "ccc",30 };
24     Person p4 = { "ddd",40 };
25     Person p5 = { "eee",50 };
26 
27     //入队
28     Push_SeqQueue(queue, (Person*)&p1);
29     Push_SeqQueue(queue, (Person*)&p2);
30     Push_SeqQueue(queue, (Person*)&p3);
31     Push_SeqQueue(queue, (Person*)&p4);
32     Push_SeqQueue(queue, (Person*)&p5);
33     
34     //返回队首元素
35     Person* temp = (Person*)Front_SeqQueue(queue);
36     printf("value: %s age: %d\n", temp->name, temp->age);
37 
38     //出队
39     Pop_SeqQueue(queue);
40     
41     //返回队首元素
42     temp = (Person*)Front_SeqQueue(queue);
43     printf("value: %s age: %d\n", temp->name, temp->age);
44 
45     int size = Size_SeqQueue(queue);
46     printf("长度%d\n", size);
47 
48     //清空队列
49     Clear_SeqQueue(queue);
50 
51     size = Size_SeqQueue(queue);
52     printf("长度%d\n", size);
53     //销毁队列
54     Free_SeqQueue(queue);
55     return 0;
56 }

测试结果:

 

posted @ 2020-08-13 18:21  dhhu007  阅读(327)  评论(0编辑  收藏  举报