数据结构复习的第一天,从最简单的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中,如果不存在的话,就返回false
template <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>