(10.19)C++实现链队列的基础操作
2013-06-13 15:40
274 查看
注:像书中一样,用到了头结点,作用就是像所有的单链表一样:插入删除首元素时不用对其进行特殊处理。
还需要稍稍注意的东西就是要注意一下空间的分配,和队列为空的情况的处理。都不算难。
空队列:就是头指针和尾指针指向同一个空间。
插入元素,从队尾进,处理一下队尾,然后,若队列为空,注意进入第一个元素时的情况就ok,都很简单。
删除元素:就从队头删除,由于加入了头结点,所以比较方便对于队头的处理。
queue.h
#include<iostream>
using
namespace
std;
struct
list
{
int data; //队列中数据
list *next;
//表结构体中的链表,用于指向下一个元素
};
class
queue
{
private:
list *front;
list *rear;
public:
queue()
{
front=rear=new list; //初始化,一定要注意分配空间,队列为空,注意头结点和头指针的区别
front->next=NULL;
}
void enqueue(int elem);
//插入元素为elem
的队尾远么
int
dequeue();
//删除队头元素,并返回其值
void traverse();
//遍历队列中的元素
};
queue.cpp
#include
"queue.h"
void
queue::enqueue(int elem)
{
list *newlist=new list;
newlist->data=elem;
newlist->next=NULL;
if(front==rear)//说明是空队列
{
front->next =
newlist;
rear=newlist;
}
else
{
rear->next=newlist;
rear=newlist;
}
}
int
queue::dequeue() //从队头出去
{
int elem;//用于记录出队列的元素
list *temp=new list; //用于临时存储要出队列队头
if(front==rear)return -1;
else
{
temp
= front->next;
elem=temp->data;
front->next=temp->next;
}
delete temp;
return elem;
}
void
queue::traverse()
//遍历整个队列
{
list *temp;
cout<<"从队头到队尾的元素分别为:"<<endl;
for(temp=front->next;temp->next!=NULL;temp=temp->next)
{
cout<<temp->data<<"
";
}
cout<<rear->data<<endl;
}
main.cpp
#include"queue.h"
int
main()
{
queue q;
q.enqueue(1);
q.enqueue(3);
q.traverse();
cout<<"删除的元素为:"<<endl;
cout<<q.dequeue()<<endl;;
q.traverse();
}
还需要稍稍注意的东西就是要注意一下空间的分配,和队列为空的情况的处理。都不算难。
空队列:就是头指针和尾指针指向同一个空间。
插入元素,从队尾进,处理一下队尾,然后,若队列为空,注意进入第一个元素时的情况就ok,都很简单。
删除元素:就从队头删除,由于加入了头结点,所以比较方便对于队头的处理。
queue.h
#include<iostream>
using
namespace
std;
struct
list
{
int data; //队列中数据
list *next;
//表结构体中的链表,用于指向下一个元素
};
class
queue
{
private:
list *front;
list *rear;
public:
queue()
{
front=rear=new list; //初始化,一定要注意分配空间,队列为空,注意头结点和头指针的区别
front->next=NULL;
}
void enqueue(int elem);
//插入元素为elem
的队尾远么
int
dequeue();
//删除队头元素,并返回其值
void traverse();
//遍历队列中的元素
};
queue.cpp
#include
"queue.h"
void
queue::enqueue(int elem)
{
list *newlist=new list;
newlist->data=elem;
newlist->next=NULL;
if(front==rear)//说明是空队列
{
front->next =
newlist;
rear=newlist;
}
else
{
rear->next=newlist;
rear=newlist;
}
}
int
queue::dequeue() //从队头出去
{
int elem;//用于记录出队列的元素
list *temp=new list; //用于临时存储要出队列队头
if(front==rear)return -1;
else
{
temp
= front->next;
elem=temp->data;
front->next=temp->next;
}
delete temp;
return elem;
}
void
queue::traverse()
//遍历整个队列
{
list *temp;
cout<<"从队头到队尾的元素分别为:"<<endl;
for(temp=front->next;temp->next!=NULL;temp=temp->next)
{
cout<<temp->data<<"
";
}
cout<<rear->data<<endl;
}
main.cpp
#include"queue.h"
int
main()
{
queue q;
q.enqueue(1);
q.enqueue(3);
q.traverse();
cout<<"删除的元素为:"<<endl;
cout<<q.dequeue()<<endl;;
q.traverse();
}
相关文章推荐
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- C++ 队列(queue)堆栈(stack)实现基础
- 单链表基础操作C++实现
- 双向链表基础操作C++实现
- C++实现普通队列,循环队列的基本操作(初始化,入队,出队,获取队列首元素等)
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- c++ 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- 链式队列的基本操作实现c++
- 单链表基础操作C++实现
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- 数据结构基础——循环队列的C++实现
- 队列 queue 的链表实现操作 -C++
- 双向链表基础操作C++实现
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 循环队列的定义、入队、出队等操作 C++代码实现
- 单链表基础操作C++实现
- 双向链表基础操作C++实现
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- c++模板类实现基础二叉树的各种操作
- 单链表基础操作C++实现