C++数据结构--链表(一)

2014-11-24 12:50:52 · 作者: · 浏览: 3

C++ 实现链表:

首先功能分析: 构造,清理,增删改查,求大小 判断空 ,取头取尾

#include

using namespace std;

typedef int T;

//链表类

class LinkedList

{

struct Node

{

T data;

Node* next;

Node(const T& t):data(t),next(NULL)

{

}

};

public:

//构造 析构 清空

LinkedList():head(NULL)

{

}

~LinedList()

{

clear();

}

void clear()

{

}

//增(insertBack insertFront)删改查(find)

void insertFront(const T& t)

{

}

void insertBack(const T& t)

{

}

void erase(const T& t)

{

}

void update(const T& t,const T& target)

{

}

unsigned int find(const T& t)

{

unsigned int position=0;

return position;

}

//判断empty 求size 遍历(travel)

bool empty()

{

}

unsigned int size()

{

int size=0;

return size;

}

void travel()

{

}

//取头 取尾

T getHead()

{

}

T getTail()

{

}

//去指定位置取指针 辅助作用

Node* getPointer(int position)

{

return NULL;

}

private:

//头指针 最重要的部分

Node* head;

};

int main()

{

}

功能添加:

#include

using namespace std;

typedef int T;

//链表类

class LinkedList

{

struct Node

{

T data;

Node* next;

//初始化data next 阻止垃圾数据

Node(const T& t=T()):data(t),next(NULL)

{

}

};

public:

//构造 析构 清空

LinkedList():head(NULL)

{

}

~LinkedList()

{

clear();

}

void clear()

{

Node *p=head;

while (p!=NULL)

{

Node *q = p->next;

delete p;//释放p所在空间

p=q;

}

}

//判断empty 求size 遍历(travel)

bool empty()

{

//判断头指针是否为空 为空表示链表不存在

return head==NULL true : false;

}

unsigned int size()

{

unsigned int size=0;

Node* p =head;

while (p!=NULL)

{

size++;

pp=p->next;

}

return size;

}

void travel()

{

//利用while循环一次次的输出来,直到指针为NULL结束

Node* p = head;

while (p!=NULL)

{

cout<data<

pp=p->next;

}

}

//增(insertAfter insertFront)删改查(find)

void insertFront(const T& t)

{

Node* p = new Node(t);

p->next=head; //讲头指针所指向的地址给p的next

head = p; //让*p作为头

}

void insertAfter(const T& t)

{

Node *p = new Node(t);

Node *tail = getPointer(size()-1);

tail->next = p;

}

void erase(const T& t)

{

unsigned int position = find(t);

Node* cur = getPointer(position);

if (position!=0)

{

Node* pre = getPointer(find(t)-1);

pre->next = cur->next;

}else{

head = cur->next;

}

delete cur;

}

void update(const T& t,const T& target)

{

Node *p=getPointer(find(target));

p->data=t;

}

unsigned int find(const T& t)

{

unsigned int position=0;

Node* p = head;

while(p!=NULL)

{

if (p->data==t)

{

return position;

}

pp=p->next;

position++;

}

return position;

}

//取头 取尾

T getHead()

{

return head->data;

}

T g