c/c++线性队列
程序员文章站
2022-03-21 21:09:55
线性队列 队列是先进先出,和栈相反. 不循环的队列就是浪费空间,如果tail到了最大值后,即使前面出队了,有空的位置,也不能再入队。 seqqueue.h seqqueue.c whilequeuemain.c ......
线性队列
队列是先进先出,和栈相反.
不循环的队列就是浪费空间,如果tail到了最大值后,即使前面出队了,有空的位置,也不能再入队。
seqqueue.h
#ifndef __SEQQUEUE__ #define __SEQQUEUE__ #include <stdio.h> #include <malloc.h> #include <assert.h> #include <memory.h> #include <stdbool.h> #define SEQQUEUE_INIT_SIZE 8 typedef int ElemType; typedef struct seqqueue{ ElemType* base; int front; int tail; }seqqueue; void init(seqqueue*); void enQueue(seqqueue*, ElemType); void show_list(seqqueue*); void deQueue(seqqueue*); void clear(seqqueue*); void destroy(seqqueue*); #endif
seqqueue.c
#include "seqqueue.h" void init(seqqueue* seq){ seq->base = (ElemType*)malloc(sizeof(ElemType) * SEQQUEUE_INIT_SIZE); seq->front = seq->tail = 0; } void enQueue(seqqueue* seq, ElemType x){ if(seq->tail == SEQQUEUE_INIT_SIZE -1){ printf("queue is full\n"); return; } seq->base[seq->tail++] = x; } void show_list(seqqueue* seq){ int i = seq->front; while(i <= seq->tail-1){ printf("%d\n", seq->base[i++]); } } void deQueue(seqqueue* seq){ if(seq->front < SEQQUEUE_INIT_SIZE - 1){ seq->front++; } } void clear(seqqueue* seq){ } void destroy(seqqueue* seq){ }
whilequeuemain.c
#include "seqqueue.h" int main(){ seqqueue list; init(&list); int select = 1; ElemType item; int index; while(select){ printf("*****************************************\n"); printf("*** [1] push [2] pop ***\n"); printf("*** [3] show_list [4] length ***\n"); printf("*** [5] clear [6] destroy ***\n"); printf("*** [0] quit ***\n"); printf("*****************************************\n"); printf("请选择:>"); scanf("%d", &select); if(0 == select) break; switch(select){ case 1: printf("请输入要插入的数据>\n"); scanf("%d",&item); enQueue(&list, item); show_list(&list); break; case 2: deQueue(&list); show_list(&list); break; case 3: show_list(&list); break; case 5: clear(&list); show_list(&list); break; case 6: destroy(&list); break; default: printf("输入的选择错误,请重新选择\n"); break; } } //destroy(&list); }