Linux下的C语言编程——队列

来源:互联网 发布:cad软件购买 编辑:程序博客网 时间:2024/04/30 07:25

队列基本功能的实现

#include <stdio.h>#include <stdlib.h>#define MAX 10struct queue_data{int queue[MAX];int top;int buttom;};typedef struct queue_data Queue;typedef struct queue_data *Data;void creat_queue(Data *queue){*queue = (Data)malloc(sizeof(Queue));if(!(*queue)){printf("malloc error!\n");exit(-1);}}void init_queue(Data queue){queue->top = -1;queue->buttom = -1;}int is_full(Data *queue){if((*queue)->buttom == -1){if((*queue)->top == MAX - 1){return 1;}else{return 0;}}else{if(((*queue)->top - (*queue)->buttom) + 1 == MAX){return 1;}else{return 0;}}}int push_queue(Data *queue,int num){int i;if(is_full(queue)){printf("the queue is full!\n");exit(0);}else{if((*queue)->top < MAX - 1)//<MAX - 1涓轰簡闃叉top = max,瓒呭嚭queue[i]鐨勮寖鍥?{((*queue)->top)++;((*queue)->queue[(*queue)->top]) = num;}else{for(i = (*queue)->buttom; i <= (*queue)->top; i++){(*queue)->queue[i - (*queue)->buttom] = (*queue)->queue[i];}(*queue)->top = (*queue)->top - (*queue)->buttom - 1;(*queue)->buttom = 0;((*queue)->top)++;((*queue)->queue[(*queue)->top]) = num;}return 1;}}int is_empty(Data *queue){if((*queue)->top <= (*queue)->buttom){return 1;}else{return 0;}}int pop_queue(Data *queue){if(is_empty(queue)){printf("the queue is empty!\n");exit(0);}else{return((*queue)->queue[++((*queue)->buttom)]);}}void get_queue(Data * queue){if(is_empty(queue)){printf("the queue is empty!\n");return ;}else{while((*queue)->buttom < (*queue)->top){((*queue)->buttom)++;printf("queue = %d\n",(*queue)->queue[(*queue)->buttom]);}}}int main(){Data queue;creat_queue(&queue);init_queue(queue);int i;for(i = 0; i < MAX; i++){if(push_queue(&queue,i + 1)){printf("push num\t%d\n",i+1);}}for(i = 0; i < MAX; i++){printf("pop num:\t%d\n",pop_queue(&queue));}get_queue(&queue);    return 0;}



0 0
原创粉丝点击