一步一步学数据结构之1--1(队列--线性表实现--不存在循环)
2013-08-06 11:37
260 查看
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
这次给大家介绍用线性表实现的队列,且不存在循环。
如图
这里介绍双向链表的常用操作:
创建队列
销毁队列
清空队列
入队
出队
返回队首元素
返回队的大小
返回队的最大长度
代码总分为三个文件:
LinkStack.h : 放置功能函数的声明,以及表的声明
LinkStack.c : 放置功能函数的定义
Main.c : 主函数,使用功能函数完成各种需求,一般用作测试
整体结构图为:
这里详细说下入队操作,出队操作和返回队首元素操作:
因为线性表的任意表元素可以直接获取,而且入队,出队都会移动表元素。且获取队首元素可以直接获取,不用进行遍历,所以表头作队头﹑队尾都可以,表尾同理。
OK! 上代码:
SeqQueue.h :
SeqQueue.c :
Main.c :
这次给大家介绍用线性表实现的队列,且不存在循环。
如图
这里介绍双向链表的常用操作:
创建队列
销毁队列
清空队列
入队
出队
返回队首元素
返回队的大小
返回队的最大长度
代码总分为三个文件:
LinkStack.h : 放置功能函数的声明,以及表的声明
LinkStack.c : 放置功能函数的定义
Main.c : 主函数,使用功能函数完成各种需求,一般用作测试
整体结构图为:
这里详细说下入队操作,出队操作和返回队首元素操作:
因为线性表的任意表元素可以直接获取,而且入队,出队都会移动表元素。且获取队首元素可以直接获取,不用进行遍历,所以表头作队头﹑队尾都可以,表尾同理。
OK! 上代码:
SeqQueue.h :
#ifndef _SEQQUEUE_H_ #define _SEQQUEUE_H_ typedef void SeqQueue; SeqQueue* SeqQueue_Create(int capacity); void SeqQueue_Destroy(SeqQueue* queue); void SeqQueue_Clear(SeqQueue* queue); int SeqQueue_Append(SeqQueue* queue, void* item); void* SeqQueue_Retrieve(SeqQueue* queue); void* SeqQueue_Header(SeqQueue* queue); int SeqQueue_Length(SeqQueue* queue); int SeqQueue_Capacity(SeqQueue* queue); #endif
SeqQueue.c :
#include "SeqList.h" #include "SeqQueue.h" SeqQueue* SeqQueue_Create(int capacity) { return SeqList_Create(capacity); } void SeqQueue_Destroy(SeqQueue* queue) { SeqList_Destroy(queue); } void SeqQueue_Clear(SeqQueue* queue) { SeqList_Clear(queue); } int SeqQueue_Append(SeqQueue* queue, void* item) { return SeqList_Insert(queue, (SeqListNode*)item, SeqList_Length(queue)); } void* SeqQueue_Retrieve(SeqQueue* queue) { return SeqList_Delete(queue, 0); } void* SeqQueue_Header(SeqQueue* queue) { return SeqList_Get(queue, 0); } int SeqQueue_Size(SeqQueue* queue) { return SeqList_Length(queue); } int SeqQueue_Capacity(SeqQueue* queue) { return SeqList_Capacity(queue); }
Main.c :
#include <stdio.h> #include "SeqQueue.h" int main(void) { SeqQueue* queue = SeqQueue_Create(20); int a[10]; int i = 0; for(i=0; i<10; i++) { a[i] = i; SeqQueue_Append(queue, a+i); } printf("Header: %d\n", *(int*)SeqQueue_Header(queue)); printf("Length: %d\n", SeqQueue_Size(queue)); printf("Capacity: %d\n", SeqQueue_Capacity(queue)); while(SeqQueue_Size(queue) > 0) { printf("%d ", *(int*)SeqQueue_Retrieve(queue)); } printf("\n"); SeqQueue_Destroy(queue); return 0; }
相关文章推荐
- 一步一步学数据结构之1--1(循环队列--线性表实现)
- 数据结构(22)循环队列--线性表实现
- 数据结构:循环队列(C语言实现)
- 数据结构---双向链表实现队列与循环链表
- 数据结构:双向链表实现队列与循环链表
- 数据结构-循环队列的基本实现操作
- 数据结构队列C++实现 链式和循环
- 一步一步学数据结构之1--1(队列--两个栈实现)
- [数据结构][适用循环队列和非循环队列]顺序队列的实现。
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 【自己动手写数据结构】 -- 循环队列的表示与实现
- 数据结构_线性表_顺序队列_循环队列_链队列
- 一步一步学数据结构之1--1(队列--单链表实现--含队头尾指针)
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- 数据结构:循环队列(C语言实现)
- 一步一步学数据结构之1--1(队列--单链表实现--含队头尾指针)
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列