数据结构和算法--队列的数组实现

来源:互联网 发布:java 变量类型 编辑:程序博客网 时间:2024/05/20 05:30
//循环队列(队列的顺序存储)的实现//注意:如果想实现循环队列,那么队列里面最多能够存放N-1个数据#include <stdio.h>#include <stdlib.h>#define N 32//定义数据类型typedef int datatype_t;//定义结构体typedef struct{datatype_t data[N];int front; //第一项的角标  int rear; //最后一项的角标 默认没有赋值状}sequeue_t;//创建一个空的队列sequeue_t *sequeue_create(){sequeue_t *sq = (sequeue_t *)malloc(sizeof(sequeue_t));sq->front = sq->rear = 0;return sq;}//判断队列是否为满int sequeue_full(sequeue_t *sq){return sq->front == (sq->rear + 1) % N ? 1 : 0;}//判断队列是否为空int sequeue_empty(sequeue_t *sq){return sq->front == sq->rear ? 1 : 0;}//入队int sequeue_input(sequeue_t *sq, datatype_t value){if(sequeue_full(sq)){printf("sequeue is full\n");return -1;}sq->data[sq->rear] = value;// 赋值 sq->rear = (sq->rear + 1) % N;//给表示最后一项空项的角标赋值 return 0;}//出队datatype_t sequeue_output(sequeue_t *sq){datatype_t value;if(sequeue_empty(sq)){printf("sequeue is empty\n");return (datatype_t)-1;}value = sq->data[sq->front];sq->front = (sq->front + 1) % N;//如果有数据则头部指针加一  只是指针加一 数据未动 return value;}int main(int argc, const char *argv[]){sequeue_t *sq = sequeue_create();sequeue_input(sq, 10);sequeue_input(sq, 20);sequeue_input(sq, 30);sequeue_input(sq, 40);sequeue_input(sq, 50);printf("del = %d\n", sequeue_output(sq));printf("del = %d\n", sequeue_output(sq));printf("del = %d\n", sequeue_output(sq));printf("del = %d\n", sequeue_output(sq));printf("del = %d\n", sequeue_output(sq));printf("del = %d\n", sequeue_output(sq));printf("del = %d\n", sequeue_output(sq));return 0;}

0 0
原创粉丝点击