队列,数组实现,指针实现的源码详细讲解
来源:互联网 发布:淘宝上老款诺基亚来源 编辑:程序博客网 时间:2024/06/09 05:22
int rear ;//队尾指针int front;//对头指针const int MAXQUEUE = 10;//该队列最大能放多少数据int queue[MAXQUEUE] ;int InQueue(int value){ if(rear>=MAXQUEUE) return 0; rear++;//队尾指针 queue[rear]=value; return 1;}int OutQueue(int *value){ if(front == rear) return 0; front++; *value = queue[front]; return 1;}//用循环队列来存储数据int InQueue(int value){ if(front==-1||rear == MAX_SIZE||rear+1==front)//表示该队列已经放满了 return 0; if(rear == MAX_SIZE)//队尾指针满了之后从头又放数据 rear=0; rear++; queue[rear]=value; return 1;}int OutQueue(int *value){ if(rear == front) return 0; front++; if(front==MAX_SIZE) front=0; *value = queue[front]; return 1;}-------------------------------------------------------------------//用指针来实现队列#include<stdio.h>struct Queue_node{int data;Queue_node *next;};Queue_node *rear = NULL;Queue_node *front = NULL;int InQueue(int value){ Queue_node *q = new Queue_node; if(q==NULL) return 0; q->data = value; q->next=NULL; if(front == NULL) { front = q; } else rear->next = q;//队尾的下一个节点是q rear = q; return 1;}int OutQueue(int *value){ Queue_node *p = NULL; if(front ==NULL) p = front; front = front->next;//队首去掉一个节点 *value = p->data; return 1; }--------------------------------------------------------双队列存储数据#include<stdio.h>#include<stdlib.h>struct Queue{//输入限制性 int data; Queue *next;};Queue *front = NULL;Queue *next = NULL;//输入限制性队列--一边输入两边输出int InQueue(int value){ Queue *q = new Queue; if(q==0) return 0; q->data = value; q->next =NULL; if(front ==NULL) front = q; else rear ->next = q; return 1; }int OutQueue(int *value){ Queue * p = NULL; if(front ==NULL) return 0; p = front; front= front->next; *value = p->data; return 1;}int OutQueueByrear(int *value);{ Queue *p =NULL; if(rear == NULL) return 0; if(rear ==front) { *value = p->data; free(rear); rear =NULL; front = NULL; }else { p = front; while(p->next!= rear) p = p->next; *value = rear->data; free(rear); rear=p; rear ->next = NULL; } return 1;}//输出限制性的双队列struct queue{int data;queue *next;};int OutQueue(int *value){ queue *q = NULL; if(front==NULL) return 0; q = front; front = front->next; free(q); return 1;}int InQueueByrear(int *value){ queue *p = new queue; if(p==NULL) return 0; p->data = value; p->next= NULL; if(rear==NULL) front = p; else rear->next = p; rear = p; return 1;}int InQueueByfront(int *value){ queue *q = new queue; if(q==NULL) return 0; q->data = value; q->next= front; front = q; if(rear ==NULL) rear = q; return 1;}