实验目的
掌握队列这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。
实验环境
CodeBlocks
实验要求
- 熟悉c语言的语法知识;
- 掌握队列的链式存储结构的定义、构造、销毁、插入、删除等基本操作;
实验内容
完成队列的链式存储结构的定义、取对头、出队、入队等函数的编写,并自己独立完成链式队列的输出函数编写(从队头开始输出)。要求在主函数中实现对以上操作的调用,实现以下功能:
(1)队列初始化为空队列。
(2)键盘输入偶数时,入队。
(3)键盘输入奇数时,出队。
(4)每输入一个整数,显示操作后队列中的值。
(5)键盘输入0时,算法结束。
- 附加题:打印杨辉三角形。
源代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 1024
typedef int elemtype; /*链队列的定义*/
typedef struct QueueNode
{
elemtype data;
struct QueueNode * next;
}LinkedQueueNode;
typedef struct LQueue
{
LinkedQueueNode * front;
LinkedQueueNode * rear;
}LQueue,* LinkedQueue;
LinkedQueue Init_LinkedQueue() /*链队列的初始化*/
{
LinkedQueue Q=(LinkedQueue) malloc (sizeof(LQueue));
LinkedQueueNode * head=(LinkedQueueNode *) malloc (sizeof(LinkedQueueNode));
if(head!=NULL && Q!=NULL)
{
head->next=NULL;
Q->front=head;
Q->rear=head;
}
return Q;
}
int LinkedQueue_Empty(LinkedQueue Q) /*链队列的判空*/
{
if(Q->front==Q->rear)
{
return 1;
}
else
{
return 0;
}
}
int Enter_LinkedQueue(LinkedQueue Q,elemtype x) /*入队*/
{
LinkedQueueNode * node;
node=(LinkedQueueNode *) malloc (sizeof(LinkedQueueNode));
if(node==NULL)
{
return 0;
}
node->data=x;
node->next=NULL;
Q->rear->next=node;
Q->rear=node;
return 1;
}
int Delete_LinkedQueue(LinkedQueue Q,elemtype *x) /*出队*/
{
LinkedQueueNode *node;
if(Q->front==Q->rear)
{
return 0;
}
else
{
node=Q->front->next;
* x=node->data;
Q->front->next=node->next;
if(node==Q->rear)
Q->rear=Q->front;
free(node);
return 1;
}
}
int GetFront_LinkedQueue(LinkedQueue Q,elemtype *x) /*取队头数据元素*/
{
if(Q->front==Q->rear)
{
return 0;
}
else
{
* x=Q->front->next->data;
return 1;
}
}
int Print_LinkedQueue(LinkedQueue Q) /*遍历*/
{
LinkedQueueNode *p=Q->front->next;
if(p==NULL)
return 0;
while(p!=NULL)
{
printf("\t%d",p->data);
p=p->next;
}
return 1;
}
void main()
{
LinkedQueue Q;
int i,k;
int x;
Q=Init_LinkedQueue();
printf("该程序的功能:\n");
printf("键盘输入偶数时,人队\n");
printf("键盘输入奇数时,出队\n");
printf("每输入一个整数,显示操作后的队列中的值\n");
printf("请任意输入一个数,输入0结束:\n");
scanf("%d",&i);
do
{
if(i%2==0)
{
k=Enter_LinkedQueue(Q,i);
}
else
{
k=Delete_LinkedQueue(Q,&x);
}
Print_LinkedQueue(Q);
printf("\n");
scanf("%d",&i);
}while(i!=0);
}
运行结果
//小声bb:内容整理不易,各位客官老爷点个赞再走吧~