用链表写队列

来源:互联网 发布:谷歌在线翻译软件 编辑:程序博客网 时间:2024/05/29 14:25
#include<stdio.h>#include<stdlib.h>#include<time.h>struct node{int num;struct node*next;};typedef struct node Node;struct queue_link{Node*top;Node*buttom;};typedef struct queue_link Queue;void create_queue(Queue **queue){(*queue) = (Queue*)malloc(sizeof(Queue));if((*queue)  == NULL){printf("malloc error\n");exit(-1);}}void init_queue(Queue**queue){(*queue)->top == NULL;(*queue)->buttom == NULL;}void push_queue(Queue**queue,int num){Node *newnode = NULL;newnode = (Node*)malloc(sizeof(Node));if(newnode == NULL){printf("malloc error\n");exit(-1);}newnode->num = num;newnode->next = (*queue)->top;(*queue)->top = newnode;}int pop_queue(Queue **queue){int num;Node *tmp = (*queue)->top;Node *p = NULL;if((*queue)->buttom == (*queue)->top){if((*queue)->buttom != NULL ){num = (*queue)->buttom->num;free((*queue)->buttom);(*queue)->buttom = NULL;(*queue)->top = NULL;return num;}printf("queue is empty\n");return -1;}while(tmp->next != (*queue)->buttom){p = tmp;tmp = tmp->next;}if((*queue)->buttom == NULL){if(tmp == (*queue)->top){num =tmp->num;free(tmp);(*queue)->buttom = NULL;(*queue)->top = NULL;return num;}else{(*queue)->buttom = tmp;    num = tmp->num;    free(tmp);    (*queue)->buttom = p;    return num;}}else{num = (*queue)->buttom->num;free((*queue)->buttom);    (*queue)->buttom = tmp;return num;}}int main(){Queue *queue = NULL;int i;int tmp;int result;srand(time(NULL));create_queue(&queue);init_queue(&queue);for(i=0;i<10;i++){tmp = rand() % 100;if(tmp >50){push_queue(&queue,i);printf("push num %d\n",i);}else{result = pop_queue(&queue);if(result != -1 ){printf("pop  num %d\n",result);}}}    return 0;}

0 0