【数据结构基础】队列的链式存储结构
2015-01-08 22:44
260 查看
队列:是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
链队列的结构:
链队列的入队操作:
链队列的出队操作:
链队列的结构:
typedef int QElemType; /* 这里假设为int */ typedef struct QNode; /* 结点结构 */ { QElemType data; struct QNode *next; } QNode, *QueuePtr; typedef struct /* 队列的链表结构 */ { QueuePtr front, rear; /* 队头,队尾指针 */ }LinkQueue;
链队列的入队操作:
/* 插入元素e为Q的新的队尾元素 */ Status EnQueue( LinkQueue *Q, QElemType e ) { QueuePtr s = ( QueuePtr )malloc( sizeof( QNode ) ); if( !s ) /* 存储分配失败 */ exit( OVERFLOW ); s->data = e; s->next = NULL; Q->rear->next = s; /* 把拥有元素e新结点s赋值给原队尾结点的后继 */ Q->rear = s; /* 把当前的s设置为队尾结点,rear指向s */ return OK; }
链队列的出队操作:
/* 若队列不为空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR */ Status DeQueue( LinkQueue *Q, QElemType *e ) { QueuePtr p; if( Q->front == Q->rear ) return ERROR; p = Q->front->rear; /* 将欲删除的队头结点暂存给p */ *e = p->data; /* 将欲删除的队头结点的值赋值给e */ Q->front->next = p->next; /* 将原队头结点后继p->next赋值给头结点后继 */ if( Q->rear == p ) /* 若队头是队尾,则删除后将rear指向头结点 */ Q->rear = Q->front; free( p ); return OK; }
相关文章推荐
- 数据结构基础(3)-->队列
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- 第十三章 数据结构基础--队列
- 数据结构基础(14) --链式队列的设计与实现
- C# 数据结构基础-实现循环队列
- 五、数据结构基础之循环队列C语言实现
- 数据结构基础(二)队列的实现
- 数据结构基础(7) --循环队列的设计与实现
- 【算法学习笔记】06.数据结构基础 队列与堆栈初步
- 数据结构之队列――链式存储结构(php代码实现)
- 基础数据结构(栈,队列)
- Java之美[从菜鸟到高手演变]之数据结构基础、线性表、栈和队列、数组和字符串
- Java之美[从菜鸟到高手演变]之数据结构基础、线性表、栈和队列、数组和字符串
- 数据结构基础(7) --循环队列的设计与实现
- 基础数据结构(栈,队列)
- 程序员面试宝典之数据结构基础----队列的入队与出队
- 数据结构基础_栈和队列
- Java之数据结构基础、线性表、栈和队列、数组和字符串,树—学习笔记
- 【数据结构基础】线性表的链式存储结构--单链表
- 数据结构基础(7) --循环队列的设计与实现