C 封裝順序表和帶頭結點的雙向迴圈鍊錶

2021-08-18 20:57:33 字數 3285 閱讀 5581

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...