顺序队列的概念及其基本运算

mac2024-07-13  41

//seqQueue.cpp #include"seqQueue.h" /* * @file seqQueue.cpp * @function 队列初始化 * @author 酸菜。 * @date 2019-09-17 */ void initseqQueue(SeqQueue* Queue) { Queue->front = 0; Queue->rear = 0; Queue->length = 0; } /* * @file seqQueue.cpp * @function 进队 * @author 酸菜。 * @date 2019-09-17 */ int inseqQueue(SeqQueue* Queue, int* value) { if (Queue->front == (Queue->rear + 1) % max) { printf("队列已满,无法入队:!"); return 0; } Queue->data[Queue->rear] =*value; Queue->rear++; Queue->length++; return 1; } /* * @file seqQueue.cpp * @function 出队 * @author 酸菜。 * @date 2019-09-17 */ int outseqQueue(SeqQueue* Queue,element* ment) { static int i = 0; if (Queue->front == Queue->rear) { printf("队列为空,无法出队:!"); return 0; } ment->ment[i] = Queue->data[Queue->front]; Queue->front++; Queue->length--; i++; return 0; } /* * @file seqQueue.cpp * @function 队是否满 * @author 酸菜。 * @date 2019-09-17 */ int seqQueue_is_full(SeqQueue* Queue) { return Queue->front == (Queue->rear + 1) % max;//如果数组的空间为10,当存储了9个元素时,则认为满了,即浪费一个存储空间 } /* * @file seqQueue.cpp * @function 队是否空 * @author 酸菜。 * @date 2019-09-17 */ int seqQueue_is_empty(SeqQueue* Queue) { return Queue->front == Queue->rear; } //以下为函数的另一种写法 /* * @file seqQueue.cpp * @function 队列初始化 * @author 酸菜。 * @date 2019 - 10 - 31 */ void initseqQueue(SeqQueue* Queue) { Queue->length = 0; Queue->front = Queue->rear = max - 1; } /* * @file seqQueue.cpp * @function 进队 * @author 酸菜。 * @date 2019 - 10 - 31 */ int inseqQueue(SeqQueue* Queue, int* value) { if (Queue->front == (Queue->rear + 1) % max) { printf("队列已满,无法入队:!"); return 0; } Queue->rear = (Queue->rear + 1) % max; Queue->data[Queue->rear] = *value; Queue->length++; return 1; } /* * @file seqQueue.cpp * @function 出队 * @author 酸菜。 * @date 2019 - 10 - 31 */ int outseqQueue(SeqQueue* Queue, element* ment) { static int i = 0; if (Queue->front == Queue->rear) { printf("队列为空,无法出队:!"); return 0; } Queue->front = (Queue->front + 1) % max; ment->ment[i] = Queue->data[Queue->front]; Queue->length--; i++; return 0; } /* * @file seqQueue.cpp * @function 队是否满 * @author 酸菜。 * @date 2019 - 10 - 31 */ int seqQueue_is_full(SeqQueue* Queue) { return Queue->front == (Queue->rear + 1) % max; } /* * @file seqQueue.cpp * @function 队是否空 * @author 酸菜。 * @date 2019 - 10 - 31 */ int seqQueue_is_empty(SeqQueue* Queue) { return Queue->front == Queue->rear; } void show_seqQueue(SeqQueue* Queue) { int i = 0; for (i = (Queue->front + 1)%max; i!= (Queue->rear+1)%max; i=(i+1)%max)//从队头遍历到队尾 { printf("当前队内元素为:%d\n", Queue->data[i]); } } //seqQueue.h #ifndef _seqQueue_h #define _seqQueue_h #include<stdio.h> #include<iostream> #include<stdlib.h> typedef int datatype; #define max 10 typedef struct element { datatype ment[max]; }element; typedef struct SeqQueue { datatype data[max]; int length;//记录队列长度 int front;//头指针 int rear;//尾指针 }SeqQueue; //队列长度也可通过L=(max+rear-front)%max进行判断 extern void initseqQueue(SeqQueue* Queue); extern int inseqQueue(SeqQueue* Queue, int* value); extern int outseqQueue(SeqQueue* Queue,element* ment); extern int seqQueue_is_full(SeqQueue* Queue); extern int seqQueue_is_empty(SeqQueue* Queue); extern void show_seqQueue(SeqQueue* Queue); #endif // ! _seqQueue_h //main.cpp #include"seqQueue.h" int main(void) { int i = 0; int a[10] = { 1,2,3,4,5,6,7,8,9,10 }; SeqQueue* Queue = (SeqQueue*)malloc(sizeof(SeqQueue)); element* ment = (element*)malloc(sizeof(element)); initseqQueue(Queue); for (i = 0; i <max-1; i++)//只能入队max-1个,因为后面方便判断满的情况 { inseqQueue(Queue,a+i); printf("当前入队元素为:%d\n", a[i]); } printf("\n"); for (i = 0; i <5;i++) { outseqQueue(Queue, ment); printf("当前出队元素为:%d\n", ment->ment[i]); } printf("\n"); for (i=Queue->front;i <Queue->rear; i++)//从队头遍历到队尾 { printf("当前队内元素为:%d\n", Queue->data[i]); } system("pause"); return 0; }
最新回复(0)