1. 程式人生 > >資料結構--順序佇列

資料結構--順序佇列

文章目錄

seqqueue.h

#ifndef __SEQQUEUE_H__
#define __SEQQUEUE_H__

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAXSIZE 10

typedef int datatype;
typedef struct{
	datatype data[MAXSIZE]
; int front,rear; }queuenode,*seqqueue; extern void create_seqqueue(seqqueue *L); extern bool is_empty_seqqueue(seqqueue L); extern bool is_full_seqqueue(seqqueue L); extern int get_number_seqqueue(seqqueue L); extern bool in_seqqueue(seqqueue L,datatype x); extern bool out_seqqueue(seqqueue L,
datatype *x); extern void show_seqqueue(seqqueue L); #endif

seqqueue.c

#include "seqqueue.h"

void create_seqqueue(seqqueue *L)
{
	if((*L = (seqqueue)malloc(sizeof(queuenode))) == NULL)
	{
		printf("malloc no memory!\n");
		return ;
	}

	(*L)->front = (*L)->rear = MAXSIZE-1;
}

bool is_empty_seqqueue
(seqqueue L) { return (L->front == L->rear); } bool is_full_seqqueue(seqqueue L) { return ((L->rear + 1)%MAXSIZE == L->front); } int get_number_seqqueue(seqqueue L) { int n=0; int r; r= (L->front+1)%MAXSIZE; while(r != (L->rear + 1)%MAXSIZE) { n++; r= (r +1)%MAXSIZE; } return n; } bool in_seqqueue(seqqueue L,datatype x) { printf("in---->data:%d front:%d rear:%d\n",L->data[L->rear],L->front,L->rear); if(is_full_seqqueue(L)) { printf("queue is full!\n"); return 0; } L->rear = (L->rear +1)%MAXSIZE; L->data[L->rear] = x; printf("in---->data:%d front:%d rear:%d\n",L->data[L->rear],L->front,L->rear); return 1; } bool out_seqqueue(seqqueue L,datatype *x) { printf("out---->data:%d front:%d rear:%d\n",L->data[L->front],L->front,L->rear); if(is_empty_seqqueue(L)) { printf("queue is empty!\n"); return 0; } L->front = (L->front + 1)%MAXSIZE; *x = L->data[L->front]; printf("out---->data:%d front:%d rear:%d\n",L->data[L->front],L->front,L->rear); return 1; } void show_seqqueue(seqqueue L) { int i=0; seqqueue r; r = L; for(i = (r->front + 1)%MAXSIZE;i != (r->rear + 1)%MAXSIZE;i = (i + 1)%MAXSIZE) { printf("%d ",r->data[i]); } puts(""); }

main.c

#include "seqqueue.h"

int main(int argc, const char *argv[])
{
	datatype x;
	seqqueue H;
	
	create_seqqueue(&H);

	show_seqqueue(H);
	
	while(1)
	{
		printf("Please input(number in <--->character out)[-1 exit:");
		if(scanf("%d",&x))
		{
			if(x == -1)
			{
				break;
			}
			in_seqqueue(H,x);
			show_seqqueue(H);
			printf("number:%d\n",get_number_seqqueue(H));
		}
		else
		{
			getchar();
			out_seqqueue(H,&x);
			printf("out:%d\n",x);
			show_seqqueue(H);
			printf("number:%d\n",get_number_seqqueue(H));
		}

	}

	show_seqqueue(H);

	return 0;
}

執行結果

在這裡插入圖片描述