C语言利用单链表实现队列的先进先出操作。难点在数据结构的使用。
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype, QElemType;
#define OVERFLOW 0
typedef struct link
{
elemtype data;
link *next;
}link,*QueuePtr;
typedef struct linkqueue
{
QueuePtr front, rear;
} linkqueue;
int InitQueue(linkqueue &Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(link));
if (!Q.front)
exit(0);
Q.front->next = NULL;
return 1;
}
int EnQueue(linkqueue &Q,QElemType e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(link));
if (!p)
exit(OVERFLOW);
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return 1;
}
int OutQueue(linkqueue &Q)
{
int e;
QueuePtr p;
p = (QueuePtr)malloc(sizeof(link));
if (!p)
exit(OVERFLOW);
e = Q.front->next->data;
Q.front->next = Q.front->next->next;
return e;
}
void print(linkqueue &Q)
{
printf("队列中元素为:\n");
QueuePtr p;
p = (QueuePtr)malloc(sizeof(link));
if (!p)
exit(OVERFLOW);
p = Q.front->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int a,n;
linkqueue Q;
InitQueue(Q);
printf("将输入5个数据\n");
for (int i = 0; i < 5; i++)
{
printf("请输入第%d个数:", i + 1);
scanf("%d", &a);
EnQueue(Q,a);
}
print(Q);
printf("请输入出队几个元素:");
scanf("%d", &n);
printf("出队元素为:\n");
for (int i = 0; i < n; i++)
{
printf("%d ",OutQueue(Q));
}
printf("\n");
print(Q);
system("pause");
return 0;
}