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