C语言 算法与数据结构 顺序循环队列 基本操作和实验案例
程序员文章站
2024-03-23 09:44:40
...
C语言 算法与数据结构 顺序循环队列 基本操作和实验案例
实验要求
实现循环队列的栈空、栈满、入队、出队、获取队首元素基本操作。
main.c
#include"ListQueue.c"
int main()
{
system("color f5");
system("title 顺序队列的基本操作 Dev: Ice2Faith");
printf("---------------------------------\n\n");
printf("\t顺序队列的基本操作\n\n");
printf("\tDev: Ice2Faith\n\n");
printf("---------------------------------\n\n");
printf("任意键继续\n>/ ");
getch();
ListQueue * P=DefaultListQueue();
int x;
char exit='c';
do
{
system("cls");
printf("请输入元素进队列,以-999结束:\n>/ ");
scanf("%d",&x);
while(x!=-999)
{
if(!InListQueue(P,x))
printf("队列已满,元素 %d 无法进入\n",x);
scanf("%d",&x);
}
printf("Len=%d\n",LenListQueue(P));
printf("Head=%d\n",GetHeadListQueue(P));
// CleanListQueue(P);
printf("出队列的结果:\n>/ ");
while(!IsEmpty(P))
{
OutListQueue(P,&x);
printf("->%d",x);
}
printf("\n\n退出请输入 * ,否则重新测试:\n>/ ");
exit=getch();
}
while(exit!='*');
return 0;
}
ListQueue.h
#ifndef _ListQueue_H_
#define _ListQueue_H_
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 1024
typedef int elemtype;
typedef struct
{
elemtype data[MAXSIZE];
int headq,endq;
} ListQueue;
ListQueue * DefaultListQueue();
int IsFull(ListQueue * P);
int IsEmpty(ListQueue * P);
int InListQueue(ListQueue * P,elemtype x);
int OutListQueue(ListQueue * P,elemtype * x);
int GetHeadListQueue(ListQueue * P);
int LenListQueue(ListQueue * P);
void CleanListQueue(ListQueue * P);
#endif
ListQueue.c
#include"ListQueue.h"
ListQueue * DefaultListQueue()
{
ListQueue * P;
P=(ListQueue *)malloc(sizeof(ListQueue));
P->headq=P->endq=0;
return P;
}
int IsFull(ListQueue * P)
{
return (P->endq+1)%MAXSIZE==P->headq;
}
int IsEmpty(ListQueue * P)
{
return P->endq==P->headq;
}
int InListQueue(ListQueue * P,elemtype x)
{
if(IsFull(P))
return 0;
P->data[(++P->endq)%MAXSIZE]=x;
return 1;
}
int OutListQueue(ListQueue * P,elemtype * x)
{
if(IsEmpty(P))
return 0;
*x=P->data[((++P->headq)+MAXSIZE)%MAXSIZE];
return 1;
}
int GetHeadListQueue(ListQueue * P)
{
return P->data[P->headq+1];
}
int LenListQueue(ListQueue * P)
{
return (P->endq+MAXSIZE-P->headq)%MAXSIZE;
}
void CleanListQueue(ListQueue * P)
{
P->headq=P->endq=0;
}
上一篇: sumo笔记(一)