欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}