链表实现代码

来源:互联网 发布:dr.wu维他命c美白 知乎 编辑:程序博客网 时间:2024/05/22 12:03

每天积一小步,虽然之前学过数据结构,此次试着把其实现代码都写出来,这是第一天。

List类如下图所示:

代码如下:

#include <iostream>#include <assert.h>using namespace std;struct Node{    int info;    Node *link;};class List{public:    List();    List(const List &other);    bool create();    void print() const;    void destory();    Node* getHead()const;    ~List();    //--------------------------------------------------    int length()const;    Node* find(const int x)const;    bool insert(const int x, const int local)const;    bool delValue(const int x)const;    //--------------------------------------------------private:    Node *head;};List::List(){    head = NULL;}List::List(const List &other){//要理解复制构造函数的运行时间,复制构造函数与复制功能的函数的由来目的是不一样的。    head = NULL;//构造函数只是运行一个就ok的    Node *temp = other.getHead();    Node *last = NULL;    while(NULL != temp){Node *temp2 = new Node;temp2->info = temp->info;temp2->link = NULL;if(NULL == head){  head = last =temp2;}else{  last->link = temp2;  last = temp2;}temp = temp->link;    } }bool List::create(){    Node *last = NULL;    Node *newNode = NULL;    int input=0;    cout << "input your number (enter -1 to over your input):" << endl;    cin >> input;    while(-1 != input){      newNode = new Node;      assert(newNode);      newNode->info =  input;      newNode->link = NULL;      if(NULL == head){head = newNode;last = newNode;      }else{last->link = newNode;last = newNode;      }      cout << "input your number (enter -1 to over your input):" << endl;      cin >> input;     }    cout << "create function run over" << endl;    return true;}Node* List::getHead()const{    return head;}void List::destory(){    while(NULL != head){      Node *temp = head->link;      delete head;      head = temp;    }}List::~List(){    cout << "deconstruction has been run." << endl;    destory();}void List::print() const{    Node *temp = head;    cout << "here is list contain:" << endl;    while(NULL != temp){cout << temp->info;cout << endl;        temp = temp->link;}    cout << "print list over!" << endl;}int List::length()const{    Node *temp = head;    int i = 0;    while(NULL != temp){      i++;      temp = temp->link;    }    return i;}Node* List::find(const int x)const{    Node *temp = head;    int i = 0;    while(NULL != temp){++i;if(x == temp->info){  cout << x << " has been found. it's localtion is " << i << endl;  return temp;  break;        }temp = temp->link;    }    return NULL;}bool List::insert(const int x, const int local)const{    if(local > length()){cout << "out of range." <<endl;return false;    }    Node *temp = head;    int i = 0;    while(NULL != temp){i++;temp = temp->link;if((local-1) == i)break;    }    Node *newNode = new Node;    newNode->info = x;    newNode->link = temp->link;    temp->link =newNode;    cout << x << " has been inserted into list." << endl;    return true;}bool List::delValue(const int x)const{    if(NULL == head)return false;    Node *pretemp = head;    Node *temp = head->link;    while(NULL != temp){      if(x == temp->info){pretemp->link = temp->link;        delete temp;return true;}      pretemp = pretemp->link;      temp = temp->link;    }    cout << "there is not x in this list." << endl;    return false;    //不要限定自己使用变量的数量}int main(){    List list;    list.create();    list.print();    list.find(3);    list.insert(10,2);    list.print();    list.delValue(10);    list.print();    return 0;}

一个体会:我们可以定义变量为我们所用,所以不要困在自己没有资源可用的地步。定义变量其实就是建造资源的过程。


原创粉丝点击