C 簡單的通用鍊錶Demo

2021-08-30 05:36:43 字數 2542 閱讀 9950

很早以前寫的乙個例子,簡單的模仿stl實現乙個鍊錶。我想對於想使用c++寫乙個簡單鍊錶的初學者有幫助 !

//			簡單的鍊錶c++實現

// aothor: 殷洪

// date: 2006-06-18

// email: [email protected]

#include "stdafx.h"

#include #include #include using namespace std;

template class node

~node()

t data;

node* next;

};template class iterator

iterator(node* node) : m_head(node)

, m_curr(node)

~iterator()

bool haselement() const

return true; }

const t& nextelement()

private:

node* m_head;

node* m_curr;

};template class link

inline iteratorgetiterator() const

protected:

void destory();

private:

node* m_head;

node* m_curr;

};template link::link() :

m_head(0)

, m_curr(0)

template link::~link()

template void link::add(const t& element) else }}

template void link::destory()

}template void link::remove(const t& element)

prev = ptr;

ptr = ptr->next;

if (ptr->data == element) }}

template bool link::find(const t& element)

} return false;

}typedef struct student _student_t;

inline bool operator==(const _student_t& st1, const _student_t& st2)

inline bool operator!=(const _student_t& st1, const _student_t& st2)

void printelements(link<_student_t>& link)

}int main(int argc, char* argv)

else

sprintf(temp, "remark-just soso-%d", i);

st1.remark = temp;

students.add(st1);

if (12 == i)

} cout << "all element: " << endl;

printelements(students);

iterator<_student_t>& rmviter = students.getiterator();

int id = 0;

while (rmviter.haselement())

/*//delete all elements

if (id == rmvelement.id)

id++;

*/} cout.setf(ios_base::boolalpha);

cout << "is empty: " << students.empty() << endl;

cout << "find(***): " << students.find(target) << endl;

cout << "remove after:" << endl;

printelements(students);

linkstrs;

strs.add("hello");

strs.add("long");

strs.add("time");

strs.add("see");

strs.add("!!!");

cout << "strs.empty() = " << strs.empty() << endl;

cout << "strs.find(\"!!!\") = " << strs.find("!!!") << endl;

strs.remove("!!!");

iteratorstriter = strs.getiterator();

while (striter.haselement())

cout << endl;

return 0;

}

通用鍊錶 通用鍊錶的基本使用

1.1雙向鍊錶指標域 從圖中可以看出雙向鍊錶的前向指標指向前乙個結點的首位址,後向指標指向下乙個節點的首位址,並且指標型別相同,且只能指向與自己型別相同的結構體。1.2通用鍊錶指標域 從圖中可以看出通用鍊錶的前向指標指向前乙個結點的指標域的首位址,後向指標指向下乙個節點的指標域的首位址,所以在不同的...

單向鍊錶demo

class stunode val pno int,val pname string 說明 只是demo用於理解,有很多漏洞,具體根據應用場景解決 class singlelinklist tmp tmp.next 此時tmp就是尾節點 tmp.next stunode 遍歷 def list un...

C 通用鍊錶構建(二)

昨日 了一篇如何構建c 通用鍊錶的文章,自己對c 不熟悉,看了許久沒有看明白這到底是如何實現的。於是打算不管三七二十一了,直接硬搬硬套。不過後來有個比較懂c 的同學幫我看了程式給我講解了那個程式是如何實現的通用鍊錶。注 只看來 c 類實現的方法 該方法採用了c 硬編碼的方式實現通用鍊錶。我們常用的鍊...