C語言之數組隊列

//主函數頭文件
#ifndef __SQQUEUE_H__
#define __SQQUEUE_H__
#include "error.h"

#define SIZE 10
#define TRUE  1
#define FLASE 0

typedef struct _queue
{
	int data[SIZE];
	int front;
	int rear;
	
}Queue;

int EnQueue (Queue *q, int x);   //進隊
int DeQueue (Queue *q, int *x);//出隊
int GetFront (Queue *q, int *x);//取隊頭
void InitQueue (Queue *q);        //置空隊
int QueueEmpty (Queue *q);      //判隊空否
int QueueFull (Queue *q);          //判隊滿否

#endif

//錯誤信息處理頭文件
#ifndef __ERROR_H__
#define __ERROR_H__

#include <stdio.h>
#define ERROR        -1
#define FULL_STACK   -2
#define EMPTY_STACK  -3
#define MALLOC_STACK -4
#define QUEUEFULL    -5
#define QUEUEEMPTY   -6

int errno;

void myerror(char *str);

char *mysrterror (int num);

#endif //__ERROR_H__

//錯誤信息處理
#include "error.h"

void myerror(char *str)
{
	printf("%s:%s\n",str,mysrterror(errno));
}

char *mysrterror(int num)
{
	switch(num)
	{
		case ERROR:
			return "輸入參數錯誤";
			
		case FULL_STACK:
			return "滿棧";
			
		case EMPTY_STACK:
			return "空棧";
			
		case MALLOC_STACK:
			return "空間分配失敗";
		case QUEUEFULL:
			return "隊滿狀態";
		case QUEUEEMPTY:
			return "隊空狀態";
	}
}

//主要代碼
#include "sqQueue.h"
#include <stdlib.h>

void InitQueue (Queue *q)
{
	if(q ==NULL)
	{
		errno = ERROR;
		return;
	}
	
	q->front = 0;
	q->rear = 0;
}

int QueueEmpty (Queue *q)
{
	if(q == NULL)
	{
		errno = ERROR;
		return FLASE;
	}
	
	return q->front == q->rear;
}

int QueueFull (Queue *q)
{
	if(q == NULL)
	{
		errno = ERROR;
		return TRUE;
	}
	return q->front == (q->rear+1)%SIZE;
}

int EnQueue (Queue *q, int x)
{
	if(q == NULL)
	{
		errno = ERROR;
		return FLASE;
	}
	if(QueueFull(q))
	{
		errno = QUEUEFULL;
		return FLASE;
	}
	
	q->rear = (q->rear + 1) % SIZE;
	q->data[q->rear] = x;
	
	return TRUE;
}

int DeQueue (Queue *q, int *x)
{
	if(q == NULL)
	{
		errno = ERROR;
		return FLASE;
	}
	if(QueueEmpty(q))
	{
		errno = QUEUEEMPTY;
		return FLASE;
	}
	q->front = (q->front + 1) % SIZE;
	*x = q->data[q->front];
	
	return TRUE;
}

int GetFront (Queue *q, int *x)
{
	if(q == NULL)
	{
		errno = ERROR;
		return FLASE;
	}
	if(QueueEmpty(q))
	{
		errno = QUEUEEMPTY;
		return FLASE;
	}
	int index = (q->front + 1) % SIZE;
	*x = q->data[index];
	
	return TRUE;
}

//主函數
#include "sqQueue.h"
#include <stdio.h>

int main()
{
	Queue q;
	int i;
	char ch[50];
	int x = 0;
	
	InitQueue(&q);
	
	if (QueueEmpty(&q))
	{
		printf ("空隊\n");
	}
	
	for(i = 0;i < 10;i++)
	{
		if (EnQueue(&q, i) != TRUE)
		{
			sprintf (ch, "第 %d 個元素入隊失敗", i);
			myerror(ch);
		}
	}
	
	for (i = 0; i < 10; i++)
	{
		if (DeQueue(&q, &x) != TRUE)
		{
			sprintf (ch, "第 %d 個元素出隊失敗", i);
			myerror(ch);
		}
		
		printf ("x = %d\n", x);
	
	return 0;
	}

}

發佈了43 篇原創文章 · 獲贊 39 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章