目的:了解了链表的定义与实现,学会了其使用方法;了解了栈类的定义和实现,学会了其使用方法;了解了队列的定义和实现,学会其使用方式;了解了c++标准模板库STL的使用方式.
内容
程序:
//Lab9_2.cpp
//linkedlist.h
#include<malloc.h>
#ifndef LINKEDLIST_CLASS
#define LINKEDLIST_CLASS
#include <iostream>
#include <cstdlib>
using namespace std;
#ifndef NULL
const int NULL = 0;
#endif // NULL
template <class T>
class LNode
{private:
public:
T num;
LNode<T> *_next;
};
template <class T>
class LinkList
{ private:
public:
LNode<T> *_head;
int _len;
LNode<T> *initList(void)// 建立一个带头节点的空链表的函数
{LNode<T> *h;
h=(LNode<T> *)malloc(sizeof(LNode<T>));
h->num=0;// 头节点的指数赋值为-1
h->_next=NULL;
return h;}
void CreatPolyn(LinkList<T> p,int m,T j);//创建链表};
template <class T>
void LinkList<T>::CreatPolyn(LinkList<T> p,int m,T j)//创建链表
{ LNode<T> *h,*e,*q;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
h=p.initList();//创建一个带头节点的空链表
q=e=h;
p._head=h;
p._len=m;
for(int i=1;i<=m;++i)
{cout<<"请输入第"<<i<<"项的数:";// 输入数
cin>>j;
e=(LNode<T> *)malloc(sizeof(LNode<T>));
e->num=j;// 把新节点插入到链表中
e->_next=NULL;
q->_next=e;
q=q->_next;}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
h=p._head;//显示构建的链表节点中的数值
e=h->_next;
int i1=1;
while(e)
{cout<<"链表中节点"<<i1<<"中存储的值是"<<endl;
cout<<e->num<<endl;
m--;
e=e->_next;
i1++;}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
e=q=p._head;// 使用循环释放链表中每个节点的内存空间
int i2=0;
while(p._len+1)
{ q=q->_next;
cout<<"释放"<<i2<<"节点!"<<endl;
free(e); //释放链表中节点的内存空间
e=q;
p._len--;
i2++;}// 释放链表中节点的内存空间
}#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//queue.h
#ifndef QUEUE_CLASS
#define QUEUE_CLASS
#include <iostream>
#include <cstdlib>
using namespace std;
#ifndef NULL
const int NULL = 0;
#endif // NULL
#include "linkedlist.h"
template <class T>
class Queue
{ private:
T j0;
int m0;
public:
void CreatQueue(int m,T j)//创建
{ j0=j;
m0=m;
LinkList<T> L;
L.CreatPolyn(L,m0,j0);
};
//成员函数的实现
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Lab9_2
#include"queue.h"
void main()
{int n;
n1:cout<<"====================================="<<endl;
cout<<" **输入类型的菜单**"<<endl<<endl;
cout<<"1.int型 2.float型 "<<endl<<"3.double型 4.char型"<<endl;
cout<<"====================================="<<endl;
cout<<"请选择你的输入类型:";
int k1; cin>>k1;
cout<<"请输入你要输入的个数:";
cin>>n;
switch(k1)
{
case 1:int j1;
Queue<int> L1;
L1.CreatQueue(n,j1);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续操作 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m1; cout<<"请输入你的选择:"; cin>>m1;
if(m1==1) goto n1;
else break;
case 2:float j2;
Queue<float> L2;
L2.CreatQueue(n,j2);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续操作 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m2; cout<<"请输入你的选择:";
cin>>m2;
if(m2==1) goto n1;
else break;
case 3:double j3;
Queue<double> L3;
L3.CreatQueue(n,j3);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续操作 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m3; cout<<"请输入你的选择:";
cin>>m3;
if(m3==1) goto n1;
lse break;
case 4:char j4;
Queue<char> L4;
L4.CreatQueue(n,j4);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m4; cout<<"请输入你的选择:";
cin>>m4;
if(m4==1) goto n1;
else break;
default:
cout<<"你的输入不合法!请重新选择!"<<endl;
goto n1;
break;
}
}
//Lab9_3.cpp
#include <iostream>
#include <deque>
using namespace std ;
int main()
{int n;cout<<"请输入你要输入的个数:";
cin>>n;
deque<int> d;//构造一个队列用于存放整数
int key, item;
for(int i=0;i <n;i++)// 输入n个整数依次向队列插入
{cout<<"输入第"<<i+1<<"个值"<<endl;
cin>>item;
d.push_back(item); //实现插入前一个数的后面的功能数值
//d.push_front(item); //实现插入前一个数的前面的功能数值}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout<<"输入的队列是:"; // 输出队列
deque<int>::iterator p=d.begin();
while(p!=d.end()) //输出数据,直到队列尾
{ cout <<*p << " ";
p++; }
cout<<endl<<"队列长度是"<<d.size()<<endl; //输出队列长度
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
d.pop_front(); //实现删除队列第一个值
//d.pop_back(); //实现删除队列最后一个值
cout<<"用pop_front()删除第一个数后的队列是:"; // 输出队列
deque<int>::iterator p1=d.begin();
while(p1!=d.end()) //输出各数据,直到队列尾
{
cout <<*p1 << " ";
p1++;
}
cout<<endl<<"队列长度是"<<d.size()<<endl; //输出队列长度
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout<<"d.empty()显示是"<<d.empty()<<endl; //实现访问???
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return 0;
}
分享到:
相关推荐
STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。...例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。
两个文件 一个是数组实现循环队列 一个是链表实现 功能是常用的基本功能 希望对大家有所帮助
第二篇 C++STL泛化技术基础 第4章 C++STL泛型库概述 第5章 C++STL泛化技术分析 第三篇 C++STL容器技术 第7章 deque双端队列容器 第8章 list双向链表容器 第9章 slist单向链表容器 第10章 bit_vector位向量容器 第11...
基于上述框架,《C++数据结构原理与经典问题求解》简要回顾了基本C++程序设计方法后,又全面系统地介绍了链表、队列、栈、树、图等基本数据结构。此外,《C++数据结构原理与经典问题求解》还提供了近百个算法、数十...
4.3 C++ STL的Visual C++编译 50 4.4 C++ STL的体系结构 52 4.4.1 容器(Container) 52 4.4.2 迭代器(Iterator) 53 4.4.3 算法(Algorithm) 53 4.4.4 函数对象(Function Object) 54 4.4.5 适配器(Adapter...
Data Structures, Algorithms, and Applications in C++, Second Edition 出版者的话 译者序 前言 第一部分 预备知识 第1章 C++回顾 1.1 引言 1.2 函数与参数 1.2.1 传值参数 1.2.2 模板函数 1.2.3 引用参数 ...
4.3 C++ STL的Visual C++编译 50 4.4 C++ STL的体系结构 52 4.4.1 容器(Container) 52 4.4.2 迭代器(Iterator) 53 4.4.3 算法(Algorithm) 53 4.4.4 函数对象(Function Object) 54 4.4.5 适配器(Adapter...
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
c++写的哈夫曼树,用了链表建树,用了stl的优先队列
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
C++_STL标准模板库 比较全面 STL 简介 2 顺序性容器 2.1 C++ VECTOR(向量容器) 2.2 C++ LIST(双向链表) 2.3 C++ DEQUE(双向队列) 2.4 三者比较 3 关联容器 3.1 特点 3.2 C++ SETS & MULTISETS 3.3 C++ ...
*5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
而且要求不可以使用语言自带的api,如C++的STL。普通的实现很简单,但是现在要求要尽可能的时间和空间复杂度的优化,要和语言自带的api比较时间和空间。这个队列还要支持如下的操作: constructor: 初始化队列 ...
*5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...
(1)常用数据结构:如字符串,数组,链表,队列,栈,二叉树等; (2)指针;内存的申请及释放操作; (3)函数指针,回调; (4)因使用C++ STL库会对工作中只涉及C语言的同事不公平,考试时不能使用C++ STL库;不...
一、实验目的:1、实现二叉树的存储结构(二叉链表或三叉链表等存储结构任选)2、熟悉二叉树基本术语的含义3、掌握使用栈和队列及递归思想完成二叉树相关操作的编程实现二、实验内容: 主要完成以下功能:1....
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
◆ 附录中提供了基本的C++语法,以帮助学生从其他语言转换为C++ 第1章 数据抽象:墙 1 1.1 面向对象的概念 2 1.1.1 面向对象分析与设计 2 1.1.2 面向对象解决方案的特征 3 1.2 获得更好的解决方案 4 1.2.1 内...