您的位置:首页 > 理论基础 > 数据结构算法

数据结构 c语言实现顺序队列(输数字入队,字符出队)

2017-07-29 13:57 851 查看
一.头文件seqqueue.h实现

#ifndef __SEQQUEUE_H__

#define __SEQQUEUE_H__

#include<stdio.h>

#include<stdlib.h>

#include<stdbool.h>

#define MAXSIZE 64

typedef int datatype;

typedef struct seqqueue

{

    datatype data[MAXSIZE];

    int front,rear;

}seq_queue,*seq_pqueue;

extern void init_seqqueue(seq_pqueue *Q);

extern bool is_full_seqqueue(seq_pqueue q);

extern bool in_seqqueue(datatype data,seq_pqueue q);

extern bool is_empty_seqqueue(seq_pqueue q);

extern bool out_seqqueue(seq_pqueue q,datatype *D);

extern void show_seqqueue(seq_pqueue q);

#endif

二函数实现seqqueue.c

#include"seqqueue.h"

void init_seqqueue(seq_pqueue *Q)

{

    *Q = (seq_pqueue)malloc(sizeof(seq_queue));

    if(NULL == (*Q))

    {

        perror("malloc");

        exit(-1);

    }

    (*Q) -> front = (*Q)->rear = MAXSIZE - 1;

}

bool is_full_seqqueue(seq_pqueue q)

{

    if((q->rear +1)%MAXSIZE == q->front)

        return true;

    else

        return false;

}

bool in_seqqueue(datatype data,seq_pqueue q)

{

    if(is_full_seqqueue(q))

    {

        printf("queue is full");

        return false;

    }

    q->rear = (q->rear+1)%MAXSIZE;

    q->data[q->rear] = data;

    return true;

}

bool is_empty_seqqueue(seq_pqueue q)

{

    if(q->rear == q->front)

        return true;

    else

        return false;

}

bool out_seqqueue(seq_pqueue q,datatype *D)

{

    if(is_empty_seqqueue(q))

    {

        printf("is empty\n");

        return false;

    }

    q->front = (q->front+1)%MAXSIZE;

    *D = q->data[q->front];

    return true;

}

void show_seqqueue(seq_pqueue q)

{

    int i;

    if(is_empty_seqqueue(q))

    {

        return;    

    }

    for(i = (q->front+1)%MAXSIZE;i != (q->rear+1)%MAXSIZE ;i=(i+1)%MAXSIZE)

    {

        printf("%d\t",q->data[i]);

    }

    puts("");

}

三.test.c包含主函数

#include"seqqueue.h"

int main()

{

    seq_pqueue q;

    datatype data,t;

    int ret;

    init_seqqueue(&q);

    while(1)

    {

        printf("puts num\n");

        ret = scanf("%d",&data);

        if(ret == 1)

        {

            if(in_seqqueue(data,q))

            {

                show_seqqueue(q);

            }

        }

        else

        {

            if(out_seqqueue(q,&t))

            {

                printf("out : %d\n",t);

                show_seqqueue(q);

            }

            

        }

        //清空输入缓冲区

        while(getchar() != '\n');

    }

    return 0;

}

四.makefile文件实现

CC = gcc                                 

CFLAGS = -Wall -g -O0

SRC = seqqueue.c test.c

OBJS = test

$(OBJS): $(SRC)

        $(CC) $(CFLAGS) -o $@ $^

clean:

        $(RM) $(OBJS) .*.sw?

                                         

                                         

                                         
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: