/*
* 單鏈循環(huán)鏈表:終點的指針域改為指向頭節(jié)點
* 采用尾指針表示單鏈循環(huán)表:查找開始節(jié)點和終端節(jié)點都很方便
*/
#include<iostream>
using namespace std;
class Chain;
class Node{
friend class Chain;
private:
char _data;
Node* _next;
};
class Chain{
public:
Chain();
bool Find(int i, Node*& x);
bool Insert(int i, char& x);
bool Delete(char x);
ostream& display( ostream &out );
friend ostream& operator << (ostream &out, const Chain &x);
private:
Node* _head;
int _length;
Node* _raear;
};
Chain::Chain()
{
_head = new Node;
_head->_next = _head;
_length=0;
}
bool Chain::Find(int i, Node*& x){
if(i<0 || i>_length) {cout << "out of index..." << endl; return false;}
Node* p = _head;
while(i--) p=p->_next;
x = p;
return true;
}
bool Chain::Insert(int i, char& x){
Node* pre_node; //store the address of node i-1
if(Find(i, pre_node)==false) return false;
Node* tmp = new Node;
tmp->_data = x;
tmp->_next = pre_node->_next;
pre_node->_next= tmp;
if(tmp->_next== _head) _raear = tmp; //updata _raear
_length++;
return true;
}
ostream& Chain::display(ostream &out){
//IsEmpty?
int i= _length;
if(i==0) return out;
Node* p = _head->_next;
while(--i){ cout << p->_data; p=p->_next;}
return out;
}
ostream& operator<< (ostream &out, Chain &chain){
chain.display(out);
return out;
}
int main(){
char str[] = "su fang";
Chain w;
for(int i=0; str[i] != 0; i++)
w.Insert(i, str[i]);
cout << "input: " << str << endl;
cout << w << endl;
return 0;
}
采用尾指針表示的單鏈表
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內(nèi)容
- 一般來說,喜歡站立的人,比喜歡躺著或或坐著的人,身材更好。與躺著的姿勢相比,站姿所消耗的能量要多出10%。而單腿站...
- 普通方法: 首先遍歷一遍單鏈表得到鏈表長度L,再次從頭結點循環(huán)L/2找到結點。算法復雜度(精確的復雜度)O(L+L...
- 快慢指針法 算法步驟 初始化快慢指針 循環(huán)處理,快指針走兩步,慢指針走一步,直到發(fā)現(xiàn)環(huán)或者到達鏈表結尾 偽代碼 環(huán)...