用C++ 實現鏈表:
首先功能分析: 構造,清理,增刪改查,求大小 判斷空 ,取頭取尾
#include <iostream>
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 <iostream>
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<<p->data<<endl;
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 getTail()
{
Node *p=getPointer(this->size()-1);
return p->data;
}
//去指定位置取指針 輔助作用
Node* getPointer(int position)
{
Node* p =head;
for(int i = 0;i<position;i++)
{
pp=p->next;
}
return p;
}
private:
//頭指針 最重要的部分
Node* head;
};
int main()
{
}