实训C++语言设计——STL链表、栈类、队列

news/2024/7/8 5:06:09

目的:了解了链表的定义与实现,学会了其使用方法;了解了栈类的定义和实现,学会了其使用方法;了解了队列的定义和实现,学会其使用方式;了解了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;


http://www.niftyadmin.cn/n/3242412.html

相关文章

实训C++语言设计——数组元素的排序查找

掌握了对数组元素的排序的方法,学会了对数组元素的查找的方法,还学习到了C库实现查找和排序. 程序&#xff1a;//Lab10_2.cpp#include<iostream>#include<algorithm>using namespace std; void displayArray(int a[],int n){ cout<<endl<<"…

Visual Studio新功能:针对Linux平台的新版SSH终端

在最新版本的Visual Studio 2022 预览版里&#xff0c;用户可以通过一项新的集成化的终端来从Windows中访问目标开发平台。这次更新的终端还包含了一个交互式的SSH外壳。用户可以通过Visual Studio中的[视图 -> 终端]来打开它&#xff0c;如下图所示&#xff1a; 现在&#…

实训C++语言设计——文件和流

熟悉流类库中常用的类及其成员函数的用法,学习到了标准的输入输出及其格式的控制,学习到了文件的应用方式,有二进制文件和文本文件. 算法&#xff1a;无方法&#xff1a;无 程序&#xff1a;//Lab11_1.cpp#include<fstream>using namespace std;#define D(a) T<<…

实训C++语言设计——异常处理

目的&#xff1a;正确理解c的异常处理机制 学习异常处理的定义及执行过程 内容&#xff1a;定义一个异常类CException &#xff0c;有成员函数Reason()&#xff0c;用来显示异常的类型&#xff0c;在子函数中触发异常&#xff0c;在主程序中处理异常&#xff0c;…

Visual Studio2010 获取时间戳c++

最近再弄时间戳&#xff0c;发现python的java的时间戳都有&#xff0c;但是唯独c的没有 网上的看了也不是真正的时间戳&#xff0c;后来研究了代码找到了系统时间戳的地方 通过调试不断跳到所需要的地方之后&#xff08;下图&#xff09;&#xff0c;找到了正在获取时间戳的函…

Android Camera2 —CameraManager API详解

一、CameraManager类概述 CameraManager是用于检测、表征和连接到 CameraDevices 的系统服务管理器。 CameraManager 是一个负责查询和建立相机连接的系统服务&#xff0c;它的功能不多&#xff0c;这里列出几个 CameraManager 的关键功能&#xff1a; 1&#xff09;、将相机…

为什么调试器会显示错误的函数

有时候在解决一些问题的时候需要使用到调试&#xff0c;这个场景很常见&#xff0c;我们在代码的某个地方设置一个断点&#xff0c;然后步进到一个函数内部单步调试&#xff0c;但是你会发现&#xff0c;调试器会显示你在另外一个函数中。这是咋回事儿&#xff1f;我们先来看看…

完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包括重做版(即新艾伦希亚战记)

&#xff08;城堡幻想曲3&#xff0c;纠正大家个错误哦&#xff0c;不是圣魔大战3&#xff0c;圣魔大战是城堡幻想曲2&#xff0c;圣魔大战不是个系列,艾伦西亚战记艾伦希亚战记,一个游戏日文名&#xff1a;タイトル キャッスルファンタジア &#xff5e;エレンシア戦記&#x…