1 #define _CRT_SECURE_NO_WARNINGS
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <conio.h>
6
7 #define QUEUELEN 15 //队列最大长度
8
9 typedef struct
10 {
11 char name[20];
12 int age;
13 }DATA;
14
15 typedef struct
16 {
17 DATA data[QUEUELEN]; //队列数组
18 int head; //队头
19 int tail; //队尾
20 }SQType;
21
22 SQType *SQTypeInit()
23 {
24 SQType *q;
25 if(q=(SQType *)malloc(sizeof(SQType))) //申请内存
26 {
27 q->head = 0; //设置队头
28 q->tail = 0; //设置队尾
29 return q;
30 }
31 else
32 {
33 return NULL; //返回空
34 }
35 }
36
37 int SQTypeIsEmpty(SQType *q) //判断空队列
38 {
39 int temp;
40 temp = q->head == q->tail;
41 return(temp);
42 }
43
44 int SQTypeIsFull(SQType *q) //判断满队列
45 {
46 int temp;
47 temp = q->tail == QUEUELEN;
48 return(temp);
49 }
50
51 void SQTypeClear(SQType *q) //清空队列
52 {
53 q->head = 0; //设置队头
54 q->tail = 0; //设置队尾
55 }
56
57 void SQTypeFree(SQType *q) //释放队列
58 {
59 if(q!=NULL)
60 {
61 free(q);
62 }
63 }
64
65 int InSQType(SQType *q, DATA data) //入队列
66 {
67 if(q->tail==QUEUELEN)
68 {
69 printf("队列已满!操作失败!\n");
70 return(0);
71 }
72 else
73 {
74 q->data[q->tail++] = data; //奖元素入队列
75 return(1);
76 }
77 }
78
79 DATA *OutSQType(SQType *q) //出队列
80 {
81 if(q->head==q->tail)
82 {
83 printf("\n队列已空!操作失败!\n");
84 exit(0);
85 }
86 else
87 {
88 return &(q->data[q->head++]);
89 }
90 }
91
92 DATA *PeekSQType(SQType *q) //读结点数据
93 {
94 if(SQTypeIsEmpty(q))
95 {
96 printf("\n空队列\n");
97 return NULL;
98 }
99 else
100 {
101 return &(q->data[q->head]);
102 }
103
104 }
105
106 int SQTypeLen(SQType *q) //计算队列长度
107 {
108 int temp;
109 temp = q->tail-q->head;
110 return(temp);
111 }
112
113 void main()
114 {
115 SQType *queue;
116 DATA data;
117 DATA *data1;
118
119 queue = SQTypeInit(); //初始化队
120 printf("入队操作: \n");
121 printf("输入姓名 年龄进行入队操作:");
122 do
123 {
124 scanf("%s%d", data.name, &data.age);
125 if(strcmp(data.name,"0")==0)
126 {
127 break; //若输入0,则退出
128 }
129 else
130 {
131 InSQType(queue,data);
132 }
133 }while (true);
134
135 printf("队的长度:%d\n",SQTypeLen(queue));
136
137 do
138 {
139 printf("\n 出队操作:按任意键进行出队操作:");
140 _getch();
141 data1 = OutSQType(queue);
142 printf("出队的数据是(%s,%d)", data1->name, data1->age);
143 }while(true);
144
145 SQTypeFree(queue); //释放队所占用的空间
146 }