数据结构—循环队列(C语言)

一、循环队列的基本概念

循环队列:

初始时:Queue->front = Queue->tail = 0;

队空时:Queue->front == Queue->tail;

队满时:(Queue->tail+1)%MAXSIZE == Queue->front;

二、代码部分

一、头文件

二、循环结点

三、初始化

四、插入

五、删除

六、打印

七、测试代码

八、主函数

九、全部代码

十、测试结果

十一、总结

一、头文件

#include 
#include #define MAXSIZE 5

二、循环结点

typedef struct CircleIntQueue
{int data[MAXSIZE];int head;int tail;
}*CircleIntQueuePtr;

三、初始化

//初始化
CircleIntQueuePtr initQueue()
{CircleIntQueuePtr Queue = (CircleIntQueuePtr)malloc(sizeof(struct CircleIntQueue));Queue->head = 0;Queue->tail = 0;return Queue;
}

四、插入

//插入元素
void insertQueue(CircleIntQueuePtr Queue,int paraData) 
{if((Queue->tail +1)%MAXSIZE == Queue->head){printf("The queue is full.\n");return ;}Queue->data[(Queue->tail)%MAXSIZE] = paraData;Queue->tail++;
}

五、删除

//删除元素
int deleteQueue(CircleIntQueuePtr Queue)
{int value;//判断队列是否为空if(Queue->head == Queue->tail ) {printf("The queue is empty.\n");return ;}	value = Queue->data[Queue->head % MAXSIZE];Queue->head++;return value;
}

六、打印

//打印循环队列
void printQueue(CircleIntQueuePtr Queue)
{int i;//判断队列是否为空if(Queue->head == Queue->tail ){printf("The queue is empty.\n");return;}for(i = Queue->head; i < Queue->tail; i++){printf("%d ", Queue->data[i % MAXSIZE]);}printf("\r\n");
} 

七、测试代码

void testLinkQueue(){int i = 10;CircleIntQueuePtr tempPtr = initQueue();for (; i < 16; i ++) {insertQueue(tempPtr, i);}printQueue(tempPtr);for (i = 0; i < 6; i ++) {printf("dequeue gets %d\r\n", deleteQueue(tempPtr));}insertQueue(tempPtr, 8);printQueue(tempPtr);
}

八、主函数

int main(){testLinkQueue();return 1;
}

九、全部代码

#include 
#include #define MAXSIZE 5typedef struct CircleIntQueue
{int data[MAXSIZE];int head;int tail;
}*CircleIntQueuePtr;//初始化
CircleIntQueuePtr initQueue()
{CircleIntQueuePtr Queue = (CircleIntQueuePtr)malloc(sizeof(struct CircleIntQueue));Queue->head = 0;Queue->tail = 0;return Queue;
}
//插入元素
void insertQueue(CircleIntQueuePtr Queue,int paraData) 
{if((Queue->tail +1)%MAXSIZE == Queue->head){printf("The queue is full.\n");return ;}Queue->data[(Queue->tail)%MAXSIZE] = paraData;Queue->tail++;
}//删除元素
int deleteQueue(CircleIntQueuePtr Queue)
{int value;//判断队列是否为空if(Queue->head == Queue->tail ) {printf("The queue is empty.\n");return ;}    value = Queue->data[Queue->head % MAXSIZE];Queue->head++;return value;
}
//打印循环队列
void printQueue(CircleIntQueuePtr Queue)
{int i;//判断队列是否为空if(Queue->head == Queue->tail ){printf("The queue is empty.\n");return;}for(i = Queue->head; i < Queue->tail; i++){printf("%d ", Queue->data[i % MAXSIZE]);}printf("\r\n");
} 
void testLinkQueue(){int i = 10;CircleIntQueuePtr tempPtr = initQueue();for (; i < 16; i ++) {insertQueue(tempPtr, i);}printQueue(tempPtr);for (i = 0; i < 6; i ++) {printf("dequeue gets %d\r\n", deleteQueue(tempPtr));}insertQueue(tempPtr, 8);printQueue(tempPtr);
}
int main(){testLinkQueue();return 1;
}

 

 

 

十、测试结果

十一、总结

1、随着代码的运行,Queue->front和Queue->tail会不断增加,但是Queue的最大空间是 MAXSIZE,所以必须要整除。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部