c語言中寫過了順序表和帶頭結點的雙向迴圈鍊錶,這裡就不對具體的邏輯進行**了。
順序表:
vector.h:
#ifndef __vector_h__
#define __vector_h__
#define null 0
typedef int datatype;
class vector
vector(const vector& v);
//vector& operator=(const vector& v);
vector& operator=(vector v); //這裡進行傳值方便呼叫建構函式,寫出現**法
~vector();
size_t size() const; //最好將size和capacity函式 定義為內聯函式
size_t capacity()const;
void expand(size_t n);
void pushback(datatype x);
void reserve(size_t n);
void popback();
void insert(size_t pos, datatype x);
void erase(size_t pos);
size_t find(datatype x);
void print();
private:
datatype* _first; //記錄起始位置
datatype* _finish; //記錄最後乙個元素的下一位置
datatype* _endofstorage; //記錄容量
};void testvector();
#endif //__vector_h__
vector.cpp:
#define _crt_secure_no_warnings 1
#include #include #include using namespace std;
#include "vector.h"
vector::vector(const vector& v)
//vector& vector::operator=(const vector& v) //不考慮寫時拷貝
//// return *this;
//}vector& vector::operator=(vector v) //現**法
return *this;
}size_t vector::size()const
size_t vector::capacity()const
void vector::expand(size_t n)
void vector::pushback(datatype x)
*_finish = x;
_finish++;
}void vector::reserve(size_t n)
}void vector::popback()
else }
void vector::insert(size_t pos, datatype x)
//搬移
int i = 0;
for (i = size(); i >= (int)pos - 1; --i) //這裡應注意pos是size_t型別,需要強轉
*(_first + pos - 1) = x;
_finish++;
}void vector::erase(size_t pos)
size_t i = 0;
for (i = pos - 1; i < size(); i++)
_finish--;
}size_t vector::find(datatype x)
} return -1;
}vector::~vector()
void vector::print()
}void testvector()
};class list
list(const list& l);
list& operator=(list l);
~list();
void pushback(datatype x);
void pushfront(datatype x);
void popback();
void popfront();
node* find(datatype x);
void insert(node* pos, datatype x);
void erase(node* pos);
void print();
private:
node* _head;
};void testlist();
#endif //__slist__h_
slist.cpp:
#define _crt_secure_no_warnings 1
#include #include #include "slist.h"
using namespace std;
list::list(const list& l)
:_head(new listnode(datatype()))
}list& list::operator=(list l)
void list::pushback(datatype x)
void list::pushfront(datatype x)
void list::popback()
void list::popfront()
void list::insert(node* pos, datatype x)
void list::erase(node* pos)
list::node* list::find(datatype x)
pcur = pcur->_next;
} return null;
}void list::print()
cout << endl;
}list:: ~list()
delete _head;
_head = null;
}void testlist()
c 實現(list)帶頭結點的雙向鍊錶
vector 1.vector資料結構 vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。因此能高效的進行隨機訪問,時間複雜度為o 1 但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶...
帶頭結點雙向鍊錶的操作(2)
此次 為對帶頭結點雙向鍊錶部分操作的函式實現 程式 對帶頭結點雙向鍊錶進行按元素刪除 void dlinklisterase dlinknode head,dlinktype value if cur head else 對帶頭結點的雙向鍊錶進行按位置刪除 void dlinklistremove ...
不帶頭結點的雙向迴圈鍊錶
基本概念 迴圈鍊錶 將單鏈表中最後乙個結點的next指向頭結點或者空指標,就使得整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。雙向鍊錶 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域prior,在雙向鍊錶的結點中有兩個指標域,乙個next指向直接後繼,乙個prio...