队列(顺序结构)

 

  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 }

 

 

 

 

 

 

 

 

posted @ 2013-12-06 17:00  lmy4710  阅读(133)  评论(0)    收藏  举报