資料結構 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?