實訓C++語言設計——STL鏈表、棧類、隊列

來源:互聯網
上載者:User

目的:瞭解了鏈表的定義與實現,學會了其使用方法;瞭解了棧類的定義和實現,學會了其使用方法;瞭解了隊列的定義和實現,學會其使用方式;瞭解了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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.