code1:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> #define MAXSIZE 65533 #define bool int
#define true 1
#define false 0 typedef int KeyType; typedef struct queue
{
KeyType * key;
int front;
int rear;
int count;
}Queue; /* 定义所有函数 */
Queue * CreateQueue();
bool QueueIsEmpty();
bool QueueIsFull();
int QueueItemCount();
bool QueueAdd();
bool QueueRemove();
KeyType GetQueueFront();
KeyType GetQueueRear();
void TraverseQueue();
bool ClearQueue();
void DeleteQueue(); //建立队列
Queue * CreateQueue(void)
{
Queue * p; p = (Queue*)malloc(sizeof(Queue));
p->key = (KeyType*)malloc(sizeof(KeyType));
p->count = 0;
p->rear = 0;
p->front = 0; return p;
} //判断队列是否为空
bool QueueIsEmpty(Queue * p)
{
return (p->count == 0) ? true : false;
} //判断队列是否已满
bool QueueIsFull(Queue * p)
{
return (p->count == MAXSIZE) ? true : false;
} //返回当前队列元素的个数
int QueueItemCount(Queue * p)
{
return p->count;
} //入队
bool QueueAdd(Queue * p, KeyType DATA)
{
if(QueueIsFull(p))
return false;
p->key[p->rear++] = DATA;
p->count++;
return true;
} //出队
bool QueueRemove(Queue * p)
{
if(QueueIsEmpty(p))
return false;
p->front++;
p->count--;
return true;
} //返回队首元素
KeyType GetQueueFront(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->front];
} //返回队尾元素
KeyType GetQueueRear(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->rear - 1];
} // 遍历队列
void TraverseQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
printf("%d ", p->key[i]);
printf("\n");
} // 清空队列
bool ClearQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
p->key[i] = 0;
p->count = 0;
p->front = 0;
p->rear = 0; return true;
} // 删除队列
void DeleteQueue(Queue * p)
{
if(p != NULL)
{
ClearQueue(p);
free(p);
p = NULL;
}
} int main()
{
Queue*h = CreateQueue();
KeyType val;
char c; puts("按 1 查看 按 2 入队");
puts("按 3 出队 按 4 返回队首元素");
puts("按 5 返回队尾元素 按 6 当前队列长度");
puts("按 7 清空队列 按 8 退出程序"); while((c = getch()) != '8') {
switch(c) {
case '1':
puts("队列:");
TraverseQueue(h);
break;
case '2':
puts("输入数据:");
scanf("%d", &val);
if(QueueAdd(h, val))
puts("已加入!");
else
puts("添加失败!");
break;
case '3':
if(QueueRemove(h))
puts("已移除!");
else
puts("移除失败!");
break;
case '4':
printf("\n当前队首元素为:%d\n", GetQueueFront(h));
break;
case '5':
printf("\n当前队尾元素为:%d\n", GetQueueRear(h));
break;
case '6':
printf("\n当前队列个数为:%d\n", QueueItemCount(h));
break;
case '7':
if(ClearQueue(h))
puts("已清空!");
break;
}
}
DeleteQueue(h); return 0;
}
code2:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> #define MAXSIZE 65533 #define bool int
#define true 1
#define false 0 typedef int KeyType; typedef struct queue
{
KeyType * key;
int front;
int rear;
}Queue; /* 定义所有函数 */
Queue * CreateQueue();
bool QueueIsEmpty();
bool QueueIsFull();
int QueueItemCount();
bool QueueAdd();
bool QueueRemove();
KeyType GetQueueFront();
KeyType GetQueueRear();
void TraverseQueue();
bool ClearQueue();
void DeleteQueue(); //建立队列
Queue * CreateQueue(void)
{
Queue * p; p = (Queue*)malloc(sizeof(Queue));
p->key = (KeyType*)malloc(sizeof(KeyType));
p->rear = 0;
p->front = 0; return p;
} //判断队列是否为空
bool QueueIsEmpty(Queue * p)
{
return (p->front == p->rear) ? true : false;
} //判断队列是否已满
bool QueueIsFull(Queue * p)
{
return ((p->rear + 1)%MAXSIZE == p->front) ? true : false;
} //返回当前队列元素的个数
int QueueItemCount(Queue * p)
{
return (p->rear - p->front + MAXSIZE) % MAXSIZE;
} //入队
bool QueueAdd(Queue * p, KeyType DATA)
{
if(QueueIsFull(p))
return false;
p->key[p->rear++] = DATA;
return true;
} //出队
bool QueueRemove(Queue * p)
{
if(QueueIsEmpty(p))
return false;
p->front++;
return true;
} //返回队首元素
KeyType GetQueueFront(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->front];
} //返回队尾元素
KeyType GetQueueRear(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->key[p->rear - 1];
} // 遍历队列
void TraverseQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
printf("%d ", p->key[i]);
printf("\n");
} // 清空队列
bool ClearQueue(Queue * p)
{
for(int i = p->front; i < p->rear; i++)
p->key[i] = 0;
p->front = 0;
p->rear = 0; return true;
} // 删除队列
void DeleteQueue(Queue * p)
{
if(p != NULL)
{
ClearQueue(p);
free(p);
p = NULL;
}
} int main()
{
Queue*h = CreateQueue();
KeyType val;
char c; puts("按 1 查看 按 2 入队");
puts("按 3 出队 按 4 返回队首元素");
puts("按 5 返回队尾元素 按 6 当前队列长度");
puts("按 7 清空队列 按 8 退出程序"); while((c = getch()) != '8') {
switch(c) {
case '1':
puts("队列:");
TraverseQueue(h);
break;
case '2':
puts("输入数据:");
scanf("%d", &val);
if(QueueAdd(h, val))
puts("已加入!");
else
puts("添加失败!");
break;
case '3':
if(QueueRemove(h))
puts("已移除!");
else
puts("移除失败!");
break;
case '4':
printf("\n当前队首元素为:%d\n", GetQueueFront(h));
break;
case '5':
printf("\n当前队尾元素为:%d\n", GetQueueRear(h));
break;
case '6':
printf("\n当前队列个数为:%d\n", QueueItemCount(h));
break;
case '7':
if(ClearQueue(h))
puts("已清空!");
break;
}
}
DeleteQueue(h); return 0;
}