亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實現(xiàn)單鏈表的構造

 更新時間:2020年04月26日 17:21:44   作者:xiaoming1430026911  
這篇文章主要為大家詳細介紹了C++實現(xiàn)單鏈表的構造,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)單鏈表的構造代碼,供大家參考,具體內(nèi)容如下

單鏈表的構造,包括最常用函數(shù),setData(),Insert(),Remove(),getData(),Search()。

代碼如下:

#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
template<class T>
struct LinkNode{
  T data;
  LinkNode<T> *link;
  LinkNode(LinkNode<T> *ptr=NULL){link=ptr;}
  LinkNode(const T& item, LinkNode<T> *ptr=NULL){data=item; link=ptr;}
};
 
template<class T>
class List{
public:
  List(){first=new LinkNode<T>;}
  List(const T& x){first=new LinkNode<T>(x);}
  List(List<T> &L);
  ~List(){makeEmpty();}
  void makeEmpty();
  int Length()const;
  LinkNode<T> *getHead()const{return first;}
  LinkNode<T> *Search(T x);
  LinkNode<T> *Locate(int i);
  bool getData(int i, T &x)const;
  void setData(int i,T &x);
  bool Insert(int i,T &x);
  bool Remove(int i, T &x);
  bool IsEmpty()const{return (first->link==NULL)?true:false;}
  bool IsFull()const{ return false;}
  void Sort();
  void inputFront(T endTag);
  void inputRear(T endTag);
  void output();
  List<T>& operator=(List<T> &L);
private:
  LinkNode<T> *first;
};
 
template<class T>
void List<T>::makeEmpty(){
  //if(first->link==NULL)return;
  LinkNode<T> *p=first->link;
  while(p!=NULL){
   first->link=p->link;
   delete p;
   p=first->link;
  }
}
 
template<class T>
LinkNode<T> *List<T>::Search(T x){
  LinkNode<T> *p=first->link;
  while(p!=NULL){
   if(p->data==x)break;
   p=p->link;
  }
  return p;//無論是否找到都返回p,若找到則返回p,沒有則返回空指針
}
 
template<class T>
LinkNode<T> *List<T>::Locate(int i){
  //這個定位函數(shù)的作用還是非常大的,方便后來的函數(shù)根據(jù)i定位到相應位置的節(jié)點
  if(i<0)return NULL;
  int sum=0;
  LinkNode<T> *p=first;
  while(p!=NULL&&sum<i){
   sum++;
   p=p->link;
  }
  return p;//無論是否為空指針,返回的都是到達i位置的指針,如果沒有到達就是已經(jīng)到結尾了
}
 
template<class T>
bool List<T>::getData(int i, T& x)const{
  if(i<0)return false;
  LinkNode<T> *p=Locate(i);
  if(p==NULL)return false;
  else{
  x=p->data;
  return true;
  }
}
 
template<class T>
void List<T>::setData(int i, T& x){
  if(i<0)return;
  LinkNode<T> *p=Locate(i);
  if(p==NULL)return;
  else{
   p->data=x;
  }
}
 
template<class T>
bool List<T>::Insert(int i, T &x){
   //LinkNode<T> *pre=Locate(i-1);
   //這里是指插入到第i個元素之后的情況
   LinkNode<T> *cur=Locate(i);
   if(cur==NULL)return false;
   LinkNode<T> *p=new LinkNode<T>(x);
   if(p==NULL){cerr<<"存儲分配錯誤!"<<endl;exit(1);}
   //if(pre==NULL||cur==NULL||p==NULL)return false;
   else{
     p->link=cur->link;
     cur->link=p;
     return true;
   }
}
 
template<class T>
bool List<T>::Remove(int i, T& x){
  //刪除第i個位置的元素
  LinkNode<T> *pre=Locate(i-1);
  if(pre==NULL)return false;
  LinkNode<T> *current=pre->link;
  if(current==NULL)return false;
  x=current->data;
  pre->link=current->link;
  delete current;
  return true;
}
 
template<class T>
void List<T>::output(){
  LinkNode<T> *current=first->link;
  while(current!=NULL){
   cout<<current->data<<" ";
   current=current->link;
  }
}
 
template<class T>
List<T>& List<T>::operator=(List<T>& L){
  //這是賦值方法
  LinkNode<T> *srcptr=L.getHead(), *p=srcptr->link;
  LinkNode<T> *desptr=first=new LinkNode<T>;
  T value;
  while(p!=NULL){
   value=p->data;
   desptr->link=new LinkNode<T>(value);
   desptr=desptr->link;
   p=p->link;
  }
  return *this;
  //用上面這種方法可以更好地實現(xiàn)賦值
//  LinkNode<T> *pre=L.getHead();
//  if(pre==NULL){
//   first=NULL;
//   return *this;
//  }
//  LinkNode<T> *p=first=new LinkNode<T>;
//  first->link=p;
//  int sum=L.Length();
//  T &x;
//  int i=1;
//  while(i<=sum){
//   L.getData(i++,x);
//   p=new LinkNode<T>(x);
//   p=p->link;
//  }
//  return *this;
 
}
 
template<class T>
int List<T>::Length()const{
  int sum=0;
  LinkNode<T> *p=first->link;
  while(p!=NULL){
   sum++;
   first->link=p->link;
   delete p;
   p=first->link;
  }
  return sum;
}
 
 
//前插法建立單鏈表
template<class T>
void List<T>::inputFront(T endTag){
  LinkNode<T> *newNode;
  T value;
  makeEmpty();
  cin>>value;
  while(value!=endTag){
   newNode=new LinkNode<T>(value);
   if(newNode==NULL){cerr<<"內(nèi)存分配錯誤!"<<endl; exit(1);}
   newNode->link=first->link;
   first->link=newNode;
   cin>>value;
  }
}
 
//后插法建立單鏈表
template<class T>
void List<T>::inputRear(T endTag){
  LinkNode<T> *newNode=new LinkNode<T>, *last;
  T value;
  last=first=new LinkNode<T>;
  cin>>value;
  while(value!=endTag){
   newNode=new LinkNode<T>(value);
   if(newNode==NULL){cerr<<""<<endl;exit(1);}
   last->link=newNode;
   last=newNode;
   cin>>value;
  }
}
 
//復制構造函數(shù)
template<class T>
List<T>::List(List<T> &L){
  //復制構造函數(shù)
  T value;
  LinkNode<T> *srcptr=L.gethead(), p=srcptr->link;
  LinkNode<T> *desptr=first->link=new LinkNode<T>;
  while(p!=NULL){
   value=p->data;
   desptr=new LinkNode<T>(value);
   desptr=desptr->link;
   p=p->link;
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解C++中的菱形繼承問題

    詳解C++中的菱形繼承問題

    這篇文章主要介紹了詳解C++中的菱形繼承問題,在多繼承結構中,存在著很多問題,比如從不同基類中繼承了同名成員,派生類中也定義了同名成員,這種二義性問題很好解決,加上要訪問的基類的類名限制就可以了,需要的朋友可以參考下
    2023-08-08
  • C語言之關于二維數(shù)組在函數(shù)中的調(diào)用問題

    C語言之關于二維數(shù)組在函數(shù)中的調(diào)用問題

    這篇文章主要介紹了C語言之關于二維數(shù)組在函數(shù)中的調(diào)用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語言實現(xiàn)數(shù)字炸彈小游戲

    C語言實現(xiàn)數(shù)字炸彈小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)數(shù)字炸彈小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++常用函數(shù)總結(algorithm 頭文件)

    C++常用函數(shù)總結(algorithm 頭文件)

    本文給大家詳細介紹了algorithm 頭文件中最常用的函數(shù)及其使用方法,當然這只是其中的一部分,algorithm 頭文件中還有很多其他的函數(shù),感興趣的朋友一起看看吧
    2023-12-12
  • C++類和對象之多態(tài)詳解

    C++類和對象之多態(tài)詳解

    大家好,本篇文章主要講的是C++類和對象之多態(tài)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++名稱空間特性

    C++名稱空間特性

    這篇文章主要介紹了C++名稱空間特性,文章圍繞C++名稱空間特性的相關資料展開詳細內(nèi)容,需要的小伙伴可以參考一下下文具體內(nèi)容,希望對你的學習有所幫助
    2022-01-01
  • C++(STL庫)之順序容器vector的使用

    C++(STL庫)之順序容器vector的使用

    這篇文章主要介紹了C++(STL庫)之順序容器vector的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C語言scandir函數(shù)獲取文件夾內(nèi)容的實現(xiàn)

    C語言scandir函數(shù)獲取文件夾內(nèi)容的實現(xiàn)

    scandir?函數(shù)用于列舉指定目錄下的文件列表,本文主要介紹了C語言scandir函數(shù)獲取文件夾內(nèi)容的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C語言數(shù)據(jù)結構實現(xiàn)鏈表去重的實例

    C語言數(shù)據(jù)結構實現(xiàn)鏈表去重的實例

    這篇文章主要介紹了C語言數(shù)據(jù)結構實現(xiàn)鏈表去重的實例的相關資料,這里提供了題目及實例代碼,需要的朋友可以參考下
    2017-07-07
  • opencv實現(xiàn)角點檢測

    opencv實現(xiàn)角點檢測

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)角點檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論