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

本文介绍了链表和队列的基本实现方法,包括链表的创建、节点的插入与删除,以及队列的构建和基本操作。通过具体的C++代码示例展示了如何使用这些数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值