1. 程式人生 > >資料結構 c語言實現順序佇列(輸數字入隊,字元出隊)

資料結構 c語言實現順序佇列(輸數字入隊,字元出隊)

一.標頭檔案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 [email protected] $^
clean:
        $(RM) $(OBJS) .*.sw?