最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中實(shí)現(xiàn)隊(duì)列類鏈?zhǔn)酱鎯?chǔ)與棧類鏈?zhǔn)酱鎯?chǔ)的代碼示例

 更新時(shí)間:2016年03月14日 17:48:26   作者:YoferZhang  
這篇文章主要介紹了C++中實(shí)現(xiàn)隊(duì)列類鏈?zhǔn)酱鎯?chǔ)與棧類鏈?zhǔn)酱鎯?chǔ)的代碼示例,通過注釋來說明,直接上代碼,簡(jiǎn)單粗暴XD 需要的朋友可以參考下

隊(duì)列類鏈?zhǔn)酱鎯?chǔ)

代碼:
linkqueue.hpp 

// 隊(duì)列類 
 
#pragma once 
 
#include "linklist.hpp" 
 
template <typename T> 
class LinkQueue 
{ 
public: 
  LinkQueue(); 
  ~LinkQueue(); 
public: 
  int clear(); 
  int append(T &t); 
  int retieve(T &t); 
  int header(T &t); 
  int length(); 
protected: 
  LinkList<T> *m_list; 
}; 
 
template <typename T> 
LinkQueue<T>::LinkQueue() 
{ 
  m_list = new LinkList < T > ; 
} 
 
template <typename T> 
LinkQueue<T>::~LinkQueue() 
{ 
  clear(); 
  delete m_list; 
  m_list = NULL; 
} 
 
template <typename T> 
int LinkQueue<T>::clear() 
{ 
  T t; 
  while (m_list->getLen() > 0) { 
    m_list->del(0, t); 
  } 
  return 0; 
} 
 
template <typename T> 
int LinkQueue<T>::append(T &t) 
{ 
  return m_list->insert(t, m_list->getLen()); 
} 
 
template <typename T> 
int LinkQueue<T>::retieve(T &t) 
{ 
  return m_list->del(m_list->getLen() - 1, t); 
} 
 
template <typename T> 
int LinkQueue<T>::header(T &t) 
{ 
  return m_list->get(0, t); 
} 
 
template <typename T> 
int LinkQueue<T>::length() 
{ 
  return m_list->getLen(); 
} 

main.cpp 

// 隊(duì)列類測(cè)試程序 
 
#include <iostream> 
#include <cstdio> 
#include "linkqueue.hpp" 
 
using namespace std; 
 
struct Student 
{ 
  char name[32]; 
  int age; 
}; 
 
void play() 
{ 
  Student s1, s2, s3; 
  s1.age = 21; 
  s2.age = 22; 
  s3.age = 23; 
 
  LinkQueue<Student> lq; // 創(chuàng)建隊(duì)列 
  lq.append(s1); // 入隊(duì)列 
  lq.append(s2); 
  lq.append(s3); 
 
  Student tmp; 
  lq.header(tmp); 
  cout << "header of queue: " << tmp.age << endl; 
  cout << "length of queue: " << lq.length() << endl; 
 
  while (lq.length() > 0) { 
    lq.retieve(tmp); 
    cout << tmp.age << " "; 
  } 
  cout << endl; 
 
  lq.clear(); 
 
} 
 
int main() 
{ 
  play(); 
 
  return 0; 
} 


棧類鏈?zhǔn)酱鎯?chǔ)

linkstack.hpp 

// 棧類 
 
#pragma once 
 
#include "linklist.hpp" 
 
template <typename T> 
class LinkStack 
{ 
public: 
  LinkStack(); 
  ~LinkStack(); 
public: 
  int clear(); 
  int push(T &t); 
  int pop(T &t); 
  int top(T &t); 
  int size(); 
protected: 
  LinkList<T> *m_list; 
}; 
 
template <typename T> 
LinkStack<T>::LinkStack() 
{ 
  m_list = new LinkList < T > ; 
} 
 
template <typename T> 
LinkStack<T>::~LinkStack() 
{ 
  clear(); 
  delete m_list; 
  m_list = NULL; 
} 
 
template <typename T> 
int LinkStack<T>::clear() 
{ 
  T t; 
  while (m_list->getLen() > 0) { 
    m_list->del(0, t); 
  } 
 
  return 0; 
} 
 
template <typename T> 
int LinkStack<T>::push(T &t) 
{ 
  return m_list->insert(t, 0); 
} 
 
template <typename T> 
int LinkStack<T>::pop(T &t) 
{ 
  return m_list->del(0, t); 
} 
 
template <typename T> 
int LinkStack<T>::top(T &t) 
{ 
  return m_list->get(0, t); 
} 
 
template <typename T> 
int LinkStack<T>::size() 
{ 
  return m_list->getLen(); 
} 

main.cpp 

// 鏈?zhǔn)酱鎯?chǔ)棧類的測(cè)試程序 
 
#include <iostream> 
#include <cstdio> 
#include "linkstack.hpp" 
 
using namespace std; 
 
struct Student 
{ 
  char name[32]; 
  int age; 
}; 
 
void play() 
{ 
  Student s1, s2, s3; 
  s1.age = 21; 
  s2.age = 22; 
  s3.age = 23; 
 
  LinkStack<Student> ls; // 創(chuàng)建棧 
 
  // 入棧 
  ls.push(s1); 
  ls.push(s2); 
  ls.push(s3); 
 
  // 獲取棧頂元素 
  Student tmp; 
  ls.top(tmp); 
  cout << "top of stack: " << tmp.age << endl; 
  cout << "size of stack: " << ls.size() << endl; 
 
  // 出棧 
  while (ls.size() > 0) { 
    ls.pop(tmp); 
  } 
 
  ls.clear(); 
 
} 
 
int main() 
{ 
  play(); 
 
  return 0; 
} 

linklist.h 

// 鏈表類 
 
#pragma once 
 
#include <iostream> 
#include <cstdio> 
using namespace std; 
 
template <typename T> 
struct Node 
{ 
  T t; 
  Node<T> *next; 
}; 
 
template <typename T> 
class LinkList 
{ 
public: 
  LinkList(); 
  ~LinkList(); 
 
public: 
  int clear(); 
  int insert(T &t, int pos); 
  int get(int pos, T &t); 
  int del(int pos, T &t); 
  int getLen(); 
 
protected: 
  Node<T> *header; 
  int length; 
}; 
 
template <typename T> 
LinkList<T>::LinkList() 
{ 
  header = new Node < T > ; 
  header->next = NULL; 
  length = 0; 
} 
 
template <typename T> 
LinkList<T>::~LinkList() 
{ 
  Node<T> *tmp = NULL; 
 
  while (header) { 
    tmp = header->next; 
    delete header; 
    header = tmp; 
  } 
} 
 
template <typename T> 
int LinkList<T>::clear() 
{ 
  ~LinkList(); 
  LinkList(); 
  return 0; 
} 
 
template <typename T> 
int LinkList<T>::insert(T &t, int pos) 
{ 
  Node<T> *cur = NULL; 
 
  // 對(duì)pos的容錯(cuò)處理 
  if (pos >= length) { 
    pos = length; 
  } 
 
  cur = header; 
  for (int i = 0; i < pos; ++i) { 
    cur = cur->next; 
  } 
 
  // 把上層應(yīng)用的t結(jié)點(diǎn)緩存到容器中 
  Node<T> *node = new Node < T > ; 
  node->next = NULL; 
  node->t = t; // 把t緩存到容器中 
 
  node->next = cur->next; 
  cur->next = node; 
 
  ++length; 
 
  return 0; 
} 
 
template <typename T> 
int LinkList<T>::get(int pos, T &t) 
{ 
  Node<T> *cur = NULL; 
 
  if (pos >= length) { 
    return -1; 
  } 
 
  cur = header; 
  for (int i = 0; i < pos; ++i) { 
    cur = cur->next; 
  } 
 
  t = cur->next->t; // 把pos位置的結(jié)點(diǎn)賦值給t 
 
  return 0; 
} 
 
template <typename T> 
int LinkList<T>::del(int pos, T &t) 
{ 
  Node<T> *cur = NULL; 
 
  if (pos >= length) { 
    return -1; 
  } 
 
  cur = header; 
  for (int i = 0; i < pos; ++i) { 
    cur = cur->next; 
  } 
  Node<T> *ret = NULL; 
  ret = cur->next; 
  t = ret->t; // 把緩存的結(jié)點(diǎn)給上層應(yīng)用t 
 
  // 刪除操作 
  cur->next = ret->next; 
  --length; 
  delete ret; // 注意釋放內(nèi)存,因?yàn)閕nsert的時(shí)候new Node<T> 
 
  return 0; 
} 
 
template <typename T> 
int LinkList<T>::getLen() 
{ 
  return length; 
} 

相關(guān)文章

  • C++ 動(dòng)態(tài)內(nèi)存分配詳解(new/new[]和delete/delete[])

    C++ 動(dòng)態(tài)內(nèi)存分配詳解(new/new[]和delete/delete[])

    這篇文章主要介紹了C++ 動(dòng)態(tài)內(nèi)存分配詳解(new/new[]和delete/delete[]),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • C語言中你不知道的隱式類型轉(zhuǎn)換規(guī)則詳解

    C語言中你不知道的隱式類型轉(zhuǎn)換規(guī)則詳解

    在C語言中,類型轉(zhuǎn)換的方式一般可分為隱式類型轉(zhuǎn)換和顯示類型轉(zhuǎn)換(也稱為強(qiáng)制類型轉(zhuǎn)換),其中隱式類型轉(zhuǎn)換由編譯器自動(dòng)進(jìn)行,不需要程序員干預(yù),本文給大家詳細(xì)介紹了C語言中隱式類型轉(zhuǎn)換規(guī)則,需要的朋友可以參考下
    2024-01-01
  • C++ 獲取URL內(nèi)容的實(shí)例

    C++ 獲取URL內(nèi)容的實(shí)例

    這篇文章主要介紹了C++ 獲取URL內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C語言實(shí)現(xiàn)最大間隙問題實(shí)例

    C語言實(shí)現(xiàn)最大間隙問題實(shí)例

    這篇文章主要介紹了C語言實(shí)現(xiàn)最大間隙問題的方法,是一個(gè)比較經(jīng)典的算法設(shè)計(jì)問題,對(duì)于學(xué)習(xí)算法設(shè)計(jì)有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C語言二分查找算法及實(shí)現(xiàn)代碼

    C語言二分查找算法及實(shí)現(xiàn)代碼

    本文主要介紹C語言的二分查找算法,這里給大家詳細(xì)介紹了什么是二分查找,并提供代碼實(shí)例,需要的小伙伴可以參考下
    2016-07-07
  • C++實(shí)現(xiàn)統(tǒng)計(jì)代碼運(yùn)行時(shí)間的示例詳解

    C++實(shí)現(xiàn)統(tǒng)計(jì)代碼運(yùn)行時(shí)間的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C++一個(gè)有趣的小項(xiàng)目——統(tǒng)計(jì)代碼運(yùn)行時(shí)間,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    對(duì)于數(shù)組想必大家都不陌生首先得要知道的是對(duì)于數(shù)組元素在內(nèi)存存儲(chǔ)是連續(xù)性的,下面這篇文章主要給大家介紹了關(guān)于C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問題解決

    vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問題解決

    C4996錯(cuò)誤的意思:是VS覺得strcpy這函數(shù)不安全,建議你使更安全的函數(shù),那么如何解決呢,本文主要介紹了vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問題解決,感興趣的可以了解一下
    2024-01-01
  • 完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問題

    完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問題

    使用QT提供的QChartView來繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報(bào)錯(cuò)呢,下面小編給大家?guī)砹薗T QGraphicsView 提升到QChartView報(bào)錯(cuò)解決方案,感興趣的朋友一起看看吧
    2023-05-05
  • C語言中棧的結(jié)構(gòu)和函數(shù)接口的使用示例

    C語言中棧的結(jié)構(gòu)和函數(shù)接口的使用示例

    這篇文章主要介紹了C語言中棧的結(jié)構(gòu)和函數(shù)接口的使用,類似很多軟件都有撤銷的操作,這其實(shí)就是用棧這種方法來實(shí)現(xiàn)的,當(dāng)然不同的軟件具體實(shí)現(xiàn)代碼會(huì)有差異,不過原理大多都是一樣的
    2023-02-02

最新評(píng)論

南陵县| 衡山县| 永德县| 旅游| 上饶县| 特克斯县| 恩平市| 广东省| 改则县| 崇礼县| 德江县| 县级市| 定结县| 南宫市| 中山市| 德州市| 临西县| 广饶县| 特克斯县| 龙南县| 娱乐| 紫金县| 秦安县| 苍山县| 陇西县| 通化县| 林口县| 祁阳县| 曲阜市| 沙田区| 类乌齐县| 都江堰市| 乌鲁木齐市| 青岛市| 灵川县| 柳江县| 天台县| 隆化县| 内江市| 黄冈市| 建平县|