LinkedList链表的使用

来源:互联网 发布:waves gtr for mac 编辑:程序博客网 时间:2024/06/05 00:42
数据结构复习的第一天,从最简单的LinkedList开始,写这个代码的时候,没有遇到太难解决的问题,大笑,啊,果然是自己进步了。除了c++的语法有些还不太熟悉以外,LinkedList理解起来是没有难度的,基本操作,增删改查。下面是代码:
////  main.cpp//  LinkListDemo////  Created by xin wang on 4/14/15.//  Copyright (c) 2015 xin wang. All rights reserved.//#include <iostream>class OutOfBounds {public:    OutOfBounds(){        std::cout<<"out of bounds"<<std::endl;    }};class Nomen{public:    Nomen(){        std::cout<<"Nomen error"<<std::endl;    }};template<class T>class LinkList{public:        LinkList(int Maxsize=10);    ~LinkList(){delete []element;}//析构函数    bool isEmpty()  {return length == 0;}//判断是否为空    int Length() const{return length;};//返回链表的长度    bool Find(int k,T &x)const;//返回是否存在某个元素    int Search(const T& x)const;//寻找某个元素在链表中的位置    LinkList<T>& Delete(int k,T& x);//删除某个元素    LinkList<T>& Insert(int k,const T& x);//插入某个元素//    void OutPut(ostream & out)const;    private:    T *element;    int MaxSize;    int length;        };//构造函数template <class T>LinkList<T>::LinkList(int MaxLinkSize){    MaxSize = MaxLinkSize;    element = new T[MaxLinkSize];    length=0;}//链表中是否存在第某个值,//如果存在的话,就把他取出来放进x中,如果不存在的话,就返回falsetemplate <class T>bool LinkList<T>::Find(int k, T& x)const{    if (k<1||k>length) {        return false;    }    x = element[k-1];    return true;    }//查找链表中是否存在某个元素,//如果存在的话,就返回他的位置,如果不存在的话,就返回0;template <class T>int LinkList<T>::Search(const T& x)const{    for (int i=0;i<length; i++) {        if(element[i]==x){            return i++;        }    }    return 0;}//删除链表中的第k个元素,如果找到这个元素的话,就将其长度减1,//返回这个链表,如果不存在的话,就抛出异常template <class T>LinkList<T>& LinkList<T>::Delete(int k, T& x){    if (Find(k, x))        for (int i=0; i<length; i++) {            element[i-1]=element[i];        }        length--;        return *this;        }//往链表中的第几个位置插入插入元素,如果位置不在数组的范围内,就抛出异常//如果长度==最大长度的话,就不能往里面插了,也会抛出异常,插入的时候,把那个位置之后的元素整体往后移动一个位置//然后再将那个元素放到那个位置上面,最后,把整个链表的长度加1.template <class T>LinkList<T>& LinkList<T>::Insert(int k, const T& x){    if (k<0 || k>length) {        throw OutOfBounds();    }    if (length==MaxSize) {        throw Nomen();    }    for (int i=length-1; i>=k; i++) {        element[i+1]=element[i];            }    element[k]=x;    length++;    return *this;}//测试int main(int argc, const char * argv[]) {    int x=0;    LinkList<int> linklist(10);    std::cout<<"链表为空吗?"<<linklist.isEmpty()<<std::endl;    std::cout<<"链表长度为"<<linklist.Length()<<std::endl;    linklist.Insert(0, 2);    linklist.Insert(1, 3);    std::cout<<"链表长度为"<<linklist.Length()<<std::endl;    linklist.Delete(1, x);    std::cout<<"链表长度为"<<linklist.Length()<<std::endl;    std::cout<<linklist.Search(2)<<std::endl;    return 0;<p>}</p>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">第一次写博客,以后还会陆陆续续写下去(ps:小海豹带出来的孩子要好好写博客!</span><img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" /><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">)</span>
0 0