c 鍊錶簡單實現

2021-06-16 23:57:09 字數 4452 閱讀 7230

鍊錶:

#include

using namespace std;

template

struct node

template

class linklist

public:

linklist()

node* p=new node;

head=p;

p->next=null;

node* push_front(const t &);

node* push_back(const t &);

node* insert(int pos,const t &);

node* pop_front();

node* pop_back();

const t&  front();

const t&  back();

const t&  del(int pos);

void  delelm(const t &);

void  clear();

int   size();

void  display();

~linklist()

this->clear();

private:

node* head;

在鍊錶的前邊插入資料

返回型別:node*  返回插入資料的位置指標

const t &e  :插入的資料

template

node*linklist::push_front(const t & e)

node* p=new node;

head->date=e;

node* q=head;

p->next=head;

head=p;

return q;

在鍊錶的最後乙個位置插入資料

返回型別:node*  返回插入資料的位置指標

const t &e  :插入的資料

template

node*linklist::push_back(const t & e)

node*p=new node;

p->date=e;

p->next=null;

node* q=head;

node* k=null;

while(q)

k=q;

q=q->next;

k->next=p;

return p;

刪除鍊錶的第乙個資料

返回型別:node*  返回刪除資料的後乙個位置指標

template

node*linklist::pop_front()

if(!head->next)

cout<<"鍊錶為空,pop_front失敗!"else

node*p=head->next;

head->next=p->next;

delete p;

return head->next;

刪除鍊錶的最後乙個資料

返回型別:node*  返回刪除資料的前乙個位置指標

template

node*linklist::pop_back()

if(!head->next)

cout<<"鍊錶為空,pop_back失敗!"else

node* p=head->next;

node* q=null;

while(p->next)

q=p;

p=p->next;

q->next=null;

delete p;

return q;

返回鍊錶的第乙個資料

返回型別:const t &  返回鍊錶的第乙個資料的引用

template

const t & linklist::front()

if(!head->next)

cout<<"鍊錶為空,front失敗!"else

return head->next->date;

返回鍊錶的最後乙個資料

返回型別:const t &  返回鍊錶的最後乙個資料的引用

template

const t & linklist::back()

if(!head->next)

cout<<"鍊錶為空,back失敗!"else

node* p=head->next;

node* q=null;

while(p)

q=p;

p=p->next;

return q->date;

在鍊錶的任意位置插入資料

返回型別:node*  返回插入的資料的指標位置

int pos  :插入的資料的位置

const t & e:插入的資料

template

node*linklist::insert(int pos,const t &e)

if(!head->next)

cout<<"鍊錶為空,insert失敗!"else if(pos>this->size())

cout<<"pos位置超出鍊錶長度,insert失敗!"else if(pos<0)

cout<<"pos位置不存在,insert失敗!"else

int i=1;

node* p=head->next;

node* q=null;

while(iq=p;

p=p->next;

i++;

node* k =newnode;

k->date=e;

q->next=k;

k->next=p;

return k;

刪除任意位置的資料

返回型別:const t &  返回鍊錶被刪除資料的引用

int pos :要刪除資料的位置

template

const t & linklist::del(int pos)

if(!head->next)

cout<<"鍊錶為空,del失敗!"else if(pos<0|pos>this->size())

cout<<"pos位置不存在,del失敗!"else

int i=1;

node* p=head->next;

node* q=null;

while(iq=p;

p=p->next;

i++;

q->next=p->next;

t e=p->date;

delete p;

return e;

刪除與e相同的資料

template

void linklist::delelm(const t&e)

if(!head->next)

cout<<"鍊錶為空,del失敗!"else

node* p=head->next;

node* q=null;

while(p->date!=e)

q=p;

p=p->next;

q->next=p->next;

delete p;

返回鍊錶的長度

template

int linklist::size()

if(!head->next)

cout<<"鍊錶為空!"else

node* p=head->next;

int i=1;

while(p->next)

p=p->next;

i++;

return i;

清空鍊錶

template

void linklist::clear()

node* p=head;

while(p)

head=p;

p=p->next;

deletehead;

遍歷輸出鍊錶中的資料

template

void linklist::display()

if(!head->next)

cout<<"鍊錶為空,display失敗!"else

node* p=head->next;

while(p)

coutp=p->next;

coutlinklistl;

l.push_back(10);

l.push_front(9);

l.push_back(8);

l.push_front(7);

l.display();

l.pop_back();

l.pop_front();

l.display();

cout<<"鍊錶長度:"l.push_front(4);

l.insert(2,6);

l.display();

l.del(2);

l.delelm(9);

l.display();

l.clear();

return 0;

c 簡單鍊錶實現

以下為linklist.件 ifndef linklist h included define linklist h included typedef structlnode lnode,plinklist classlinklist endif linklist h included 以下為lin...

C 鍊錶簡單功能實現

實現的是乙個小型圖書館的程式,功能包括增加新書,以及讀者借書和還書等。如下 include include include include include using namespace std class patron class book bool operator const book bk ...

簡單鍊錶實現

今天元旦,不想工作。只想寫一寫自己想學習的東西。今天就寫了個鍊錶的單向鍊錶。標頭檔案chain.h ifndef chain define chain include include using namespace std templateclass chain templateclass chai...