線性表 線性表 抽象鍊錶類 單向鍊錶講解

2021-07-22 01:09:32 字數 2961 閱讀 4819

線性表兩種分類:

順序表,鍊錶

線性表》記錄(資料元素)>資料項

順序表:只有唯一乙個節點只存在乙個後繼,不存在前驅,只有唯一乙個節點存在前驅,不存在後繼,中間所有的節點都存在位移的前驅和後繼

順序表的優點:可以隨機訪問,方便訪問,儲存密度大,空間利用率高

順序表缺點:難以實現插入資料的操作,而且空間一旦定義就會固定,不能動態控制空間記憶體的大小

鍊錶的缺點:不能隨機訪問,空間訪問麻煩指標域會占用部分記憶體空間,

鍊錶優點:可以方便實現資料節點的插入

順序儲存類就不過多講解了

鏈式儲存類中我們來實現一下抽象鍊錶類

節點物件《抽象鍊錶物件《單鏈表物件

#include"iostream"

#include"cstdio"

#include"cstring"

#include"cstdlib"

using namespace std;

templateclass listnode

listnode(t item,listnode* another)

t data;

listnode* next;

};templateclass ablist

ablist(ablist& a) //注意這裡必須是引用,因為涉及到指標,不用引用的話,不會完整的複製過來

}~ablist()

free(head);

} listnode* gethead()

listnode* getnext(listnode& n)

t getnumber(int i) //取出第i個元素

bool setnumber(t k,int i)

p->data=k;

return true;

} listnode* find(int i)

return p;

} listnode* find1(t num)

return null;

} void listempty()

free(head);

head=null;

length=0;

} int returnlength()

virtual bool insert(t,int)=0;

virtual bool delete_(int)=0;

virtual bool remove(t)=0;

protected:

listnode* head; //這一點可以學習一下,都定義成模板,通過外包類模板模範子類的模板

int length;

};templateclass singlelist:public ablist//萬分小心,學習一下,在模板類繼承的時候,我們的因為偏特化的存在,必須要用this才可以看到父類成員

bool insert(t num,int i)

i++;

listnode* p=this->find(i-1);

if(p==null) return false;

listnode* help=new listnode(num,null);

help->next=p->next;

p->next=help;

this->length++;

return true;

}bool delete_(int i)

}bool remove(t num)

if(p==null) return false;

help->next=help->next->next;

free(p);

this->length--;

return true;

}void print()

coutmy.insert(1,my.returnlength());

my.insert(2,my.returnlength());

my.insert(4,my.returnlength());

my.insert(7,my.returnlength());

my.insert(3,my.returnlength());

my.insert(8,my.returnlength());

my.insert(9,my.returnlength());

my.print();

my.delete_(5);

my.print();

my.remove(8);

my.print();

return 0;

}

#include"iostream"

#include"cstdlib"

#include"cstdio"

using namespace std;

class point

friend ostream& operator<<(ostream& out,point& p)

int getceof()

int getexp()

point* next;

private:

int ceof;

int exp;

};class singlelist

void insert(int ceof,int exp)

void add(singlelist& a,singlelist& b)

else

else

} help->next=headc;

help=help->next;

headc=headc->next;

} if(heada==null)

} else

}} void print()

}private:

point* head;

int num;

};int main()

線性表之單向鍊錶

pragma once 單向 不迴圈 不帶頭 typedef int sldatetype typedef struct slistnode slistnode typedef struct slist slist 初始化 void slistinit slist list 銷毀 void slis...

線性表 鍊錶

線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...

線性表 鍊錶

include include typedef int elemtype typedef struct node lnode,linklist linklist createlinklist1 頭插法 linklist createlinklist2 尾插法 void lengthlinklist ...