补多少废话,直接看代码:
#include <stdio.h>
#include <stdlib.h>
#define Maxlen 5
typedef struct note {
char *c;
int front;
int rear;
int Maxsize; /*存储最大长度*/
} Queue;
Queue *create_Q(void);
void enter_Q(Queue *Q, char a);
char out_Q(Queue *Q);
void print_Q(Queue *Q);
int main()
{
char x;
Queue *Q;
Q = create_Q();
enter_Q(Q, 'a');
enter_Q(Q, 'b');
enter_Q(Q, 'c');
x = out_Q(Q);
enter_Q(Q, 'd');
enter_Q(Q, 'e');
x = out_Q(Q);
print_Q(Q);
getchar();
return 0;
}
/*
* 新建队列 数组方式 注意数组实现队列要用循环队列实现,避免 假溢出 的情况
*/
Queue *create_Q(void)
{
Queue *Q;
Q = (Queue *)(malloc(sizeof(Queue)));
if (Q == NULL) {
printf ("Out of space");
return NULL;
}
Q->c = (char *)(malloc(Maxlen*sizeof(char))); /* 为数组元素分配内存 */
if (Q->c == NULL) {
printf ("Out of space");
return NULL;
}
Q->front = 0;
Q->rear = 0;
Q->Maxsize = Maxlen;
return Q;
}
/*
* 进入队列 数组方式
*/
void enter_Q(Queue *Q, char a)
{
if ((Q->rear+1)%Q->Maxsize == Q->front) { /* 队满*/
printf("Full queue");
return;
}
Q->c[Q->rear] = a;
Q->rear = (Q->rear + 1) % Q->Maxsize;
printf("%d %d\t", Q->front, Q->rear);
// printf("%c %c\n", Q->c[Q->front], Q->c[Q->rear]);
}
/*
* 出队队列 数组方式
*/
char out_Q(Queue *Q)
{
char temp;
if (Q->rear == Q->front) { /* 队空 */
printf("Empty queue");
return -1;
}
temp = Q->c[Q->front];
Q->front = (Q->front + 1) % Q->Maxsize;
return temp;
}
/*
* 打印队列 数组方式
*/
void print_Q(Queue *Q)
{
int p, q;
p = Q->front;
q = Q->rear;
printf("%d %d\n",Q->front, Q->rear);
while ((p % Q->Maxsize) != q) {
printf("%c\n", Q->c[(p + Q->Maxsize) % Q->Maxsize]);
p++;
}
}
只实现的少部分操作,觉得其实这些已经够用了。