54 C 鍊錶結點類模板的定義和應用

2021-10-12 10:39:39 字數 4262 閱讀 6245

結點類模板

#ifndef node_h

#define node_h

//類模板的定義

templateclass node ;

//類的實現部分

//建構函式,初始化資料和指標成員

templatenode::node(const t& data, node* next/*=0*/) :data(data), next(next) {};

//返回後繼結點的指標

templatenode* node:: nextnode()

//返回後繼結點的指標

templateconst node* node::nextnode()const

//在當前節點後插入結點p

templatevoid node::insertafter(node* p)

//刪除本結點的後繼結點,並返回其位址

templatenode* node::deleteafter()

next = temptr->next;//使當前的指標域指向temptr的後繼結點

return temptr;//返回被刪除結點的指標

}#endif // !node_h

#pragma once

#include#include#include"array.h"

#include"node.h"

using namespace std;

//鍊錶結點類的應用

//生成鍊錶

//查詢某值並刪除

//程式結束之前清空鍊錶

int main()

//a一一對n賦值

for (int i = 0; i < 9; i++)

n[9].data = a[9];

//將陣列首位址賦值給陣列指標名np

node* np = &n[0];

//從頭往後遍歷 n[0]的位址放的是頭結點

while (np != null)

cout << endl;

int f;

cout << "請輸入要查詢的數:";

cin >> f;

nodep(0, &n[0]);

np = &p;

//從頭往後遍歷到尾,發現下乙個結點data等於f的數就刪掉

while (np->nextnode() != null)

np = np->nextnode();

} cout << "刪除後的鍊錶:" << endl;

/** 在linkedlist的設計中,採用了附加指標front和rear,即鍊錶的結構為front->a1->a2->...->rear

* 只有在析構函式中才刪除這兩個指標,其餘的時間這兩個指標都是存在的,其中的資料始終為0,不儲存使用者資料

*/template class linkedlist ;

//類的實現部分

//生成新節點,資料域為item,指標域為ptrnext 返回指向該結點的指標

templatenode* linkedlist::newnode(const t& item, node* ptrnext)

//釋放結點

templatevoid linkedlist::freenode(node* p)

temp->next = p->next;

if(currptr==p)

if (prevptr = p)

//將鍊錶l複製到當前表(假設當前表為空),被複製建構函式和operator=呼叫

template void linkedlist::copy(const linkedlist& l)

ptr->next = rear;

size = l.getsize();

position = l.currentposition();

} //建構函式

template linkedlist::linkedlist()

//複製建構函式

template linkedlist::linkedlist(const linkedlist& l)

//析構函式

template linkedlist::~linkedlist()

//過載賦值運算子

template linkedlist& linkedlist::operator = (const linkedlist& l)

//返回鍊錶中元素個數

template int linkedlist::getsize() const

//鍊錶是否為空

template bool linkedlist::isempty() const

//初始化游標的位置

template void linkedlist::reset(int pos)

int i = 0;

prevptr = front;

currptr = front->next;

while (i < pos)

i++;

currptr = currptr->next;

prevptr = prevptr->next;

} position = pos;

} //使游標移動到下乙個節點

template void linkedlist::next()

currptr = currptr->next;

prevptr = prevptr->next;

position++;

} //游標是否移動到鏈尾

template bool linkedlist::endoflist() const

//返回游標當前的位置

template int linkedlist::currentposition() const

//在表頭插入節點

template void linkedlist::insertfront(const t & item)

//在表尾插入節點

template void linkedlist::insertrear(const t & item)

//在當前節點之前插入節點

template void linkedlist::insertat(const t & item)

//在當前節點之後插入節點

template void linkedlist::insertafter(const t & item)

//刪除頭節點,實質是刪除front->next

template t linkedlist::deletefront()

if (prevptr == front->next)

node* temp = front->next;

t d = temp->getdata();

front->next = temp->next;

delete temp;

size--;

if (front->next != rear)

position--;

return d;

} //刪除當前節點

template void linkedlist::deletecurrent()

//返回對當前節點成員資料的引用

template t& linkedlist::data()

//返回對當前節點成員資料的常引用

template const t& linkedlist::data() const

//清空鍊錶:釋放所有節點的記憶體空間,被析構函式和operator=使用

template void linkedlist::clear()

size = 0;

position = 0;

}#endif //link_h_

鍊錶指標域指向哪 鍊錶的概念與結點類模板

類模板的定義 template class node 類的實現部分 建構函式,初始化資料和指標成員 template node node const t data,node next 0 data data next next 返回後繼結點的指標 template node node nextnod...

c 中模板 類模板的宣告和定義

一 函式模板用法 1.1申明和定義 在函式申明和定義前面,加乙個模板template t,class c 就行,其餘正常定義和申明 呼叫時,跟正常函式一樣呼叫 注意 模板在呼叫時,才確定引數的具體型別!模板的宣告或定義只能在全域性,命名空間或類範圍內進行。即不能在區域性範圍,函式內進行,比如不能在m...

鍊錶的順序表示和實現(C 模板類實現)

list.h ifndef list h define list h define list init size 100 define listincrement 10 template class list 構造乙個空的線性表 template list list 銷毀線性表 template v...