Print()打印函数,形参为Queeu p, 若为Queue * p, 会乱码。
#include<stdio.h>
#include<string.h>
#define Maxsize 100
typedef struct Queue
{
char date[Maxsize];
int front;
int rear;
}Queue;
void En_Queue(Queue* p, char s);
void Init_Queue(Queue* p)
{
p->front = p->rear = 0;
}
short IsEmpty(Queue* p)
{
if (p->front == p->rear)
return 1;
else
return 0;
}
short IsFull(Queue* p)
{
if (p->front == (p->rear + 1) % Maxsize)
return 1;
else
return 0;
}
void Create_Queue(Queue* p)
{
char x;
printf("请输入入队的元素(空格分开,输入【#】结束):\n");
scanf_s("%c", &x);
getchar(); //吃掉空格
while (x != '#')
{
En_Queue(p, x);
scanf_s("%c", &x);
getchar();
}
}
void En_Queue(Queue* p, char s)
{
if (IsFull(p))
return;
p->date[p->rear] = s;
p->rear = (p->rear + 1) % Maxsize;
}
short De_Queue(Queue* p, char* s)
{
if (IsEmpty(p))
return 0;
*s = p->date[p->front];
p->front = (p->front + 1) % Maxsize;
return 1;
}
int Len_Queue(Queue* p)
{
return (p->rear - p->front + Maxsize) % Maxsize;
}
void Print(Queue p)
{
printf("打印队列:");
while (p.front!=p.rear)
{
printf("%c", p.date[p.front]);
p.front = (p.front + 1) % Maxsize;
}
printf("\n");
}
int main()
{
Queue p;
char str[10] = "ABCDE";
int i, j; char temp;
Init_Queue(&p);
Create_Queue(&p);
printf("队列的长度:%d\n", Len_Queue(&p));
printf("将字符串“ABCDE”入队:\n");
for (i = 0; i < strlen(str); i++)
{
En_Queue(&p, str[i]);
printf("%c入队\n", str[i]);
}
Print(p);
printf("队列的长度:%d\n", Len_Queue(&p));
printf("出队五个元素:\n");
for (j = 0; j < 5; j++)
{
De_Queue(&p, &temp);
printf("%c出队\n", temp);
}
Print(p);
}