第3章 栈和队列——循环队列的元素的插入和删除
2013-04-30 10:04
239 查看
/* * 这个程序是通过少用队列中的一个元素空间让队列循环。 * 并且在循环队列中实现元素的插入和删除。 */ #include<stdio.h> #include<stdlib.h> #define MAXQSIZE 6 /*最大队列长度*/ typedef struct sqqueue{ char *base; int front; int rear; }sqqueue; int initqueue(sqqueue *A){ /*构造一个空队列 A */ A->base = (char *)malloc(MAXQSIZE *sizeof(char)); if(!A->base) return 0; A->front = A->rear = 0; return 1; } int enqueue(sqqueue *A,char a){ /*插入元素 a 为 A 的新的队尾元素*/ if((A->rear+1)%MAXQSIZE == A->front) /*队列满*/ return 0; A->base[A->rear] = a; A->rear = (A->rear+1)%MAXQSIZE; return 1; } char dequeue(sqqueue *A,char a){ /*若队列不空,则删除 A 的对头元素,用 a 返回其值*/ char t; t = '!'; if(A->front == A->rear) /*否则返回 0 */ return t; a = A->base[A->front]; A->front = (A->front+1)%MAXQSIZE; return a; } int print(sqqueue *A){ /*把队列中的所有元素打印出来*/ int i; for(i = A->front;i<=A->rear-1;i++){ printf("%c ",A->base[i]); } printf("\n"); printf("队列打印结束。\n"); return 0; } int main(){ sqqueue A; char a,b,c,d,e,f,t; if(initqueue(&A) == 1){ scanf("%c%c%c%c%c",&a,&b,&c,&d,&e); enqueue(&A,a); enqueue(&A,b); enqueue(&A,c); enqueue(&A,d); enqueue(&A,e); print(&A); t = dequeue(&A,f); printf("%c\n",t); } return 0; } /* * 测试举例: * 输入: * abcde //注意因为接收的是字符类型,输入字符之间不可以有空格。 * //否则存放的是空格,输出时不易看出是否正确。 * 输出: * a b c d e //存放在队列中的元素。 * 队列打印结束。//打印结束证据。 * a //删除的队列头元素。 */
相关文章推荐
- 栈和队列的插入、删除、获取头尾元素操作
- 在循环队列里添加删除元素
- 队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)
- foreach循环与迭代器循环 删除插入元素的区别
- 链式的队列的创建、插入、删除、遍历、取队首元素
- JAVA List循环队列删除元素/List.remove
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
- 循环队列 + 插入 + 删除 + 遍历等操作
- 队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)
- java循环中如何删除集合中的元素
- 基于list循环删除元素,迭代器失效的问题详解
- js中数组插入、删除元素操作的方法
- hdu 5249 元素插入、删除找中值
- 链队列的初始化,建立,插入,查找,删除。
- ArrayList循环遍历并删除元素的常见陷阱
- C#循环删除List中某个元素
- 数据结构之循环链表操作3-(合并,拆分,插入,删除,建立等)
- 循环队列中元素个数怎么算
- python基础编程_26_列表元素的插入,删除,排序
- 队列(插入、删除、求长、打印)