當前位置:成語大全網 - 書法字典 - 定義字典列表學生

定義字典列表學生

#包含“Exp19_1.h“

# include & ltfstream & gt

# include & ltiostream & gt

# include & lt字符串& gt

使用命名空間std

Class student{ //為簡單起見,數據字段中只保存學生編號和姓名。

int鍵;

字符串名稱;

公共:

void putkey(int k){ key = k;}

void Putnam(string Nam){ name = Nam;}

void show(){ cout & lt;& ltkey & lt& lt\ t‘& lt;& lt名稱& lt& ltendl}//應重載典型的插入運算符。

布爾運算符& lt學生& ampstu){回車鍵& ltstu.key}

布爾運算符!=(學生& amp斯圖){回車鍵!= stu.key}

};

int main(){

int i,k;

字符串nam

節點& lt學生& gt* p 1;

學生斯圖;

列表& lt學生& gtlist1,list2,list3

ifstream infile

infile . open(“exp 19 _ 1 . txt“,IOs::in);

如果(!infile)

cout & lt& lt“無法打開文件“

返回1;

}

for(I = 0;我& lt9;i++){

infile>& gtk;

stu . putkey(k);

infile>& gtnam

斯圖·普特南(Nam);

P1=list1。CreatNode(斯圖);

列表1。insert front(p 1);//生成list1 forward。

P1=list1。CreatNode(斯圖);

列表2。insert rear(p 1);//反向生成list2。

}

infile . close();

列表1。print list();

cout & lt& lt“列表1長度:“

cout & lt& ltendl

列表2。print list();

cout & lt& ltendl

cout & lt& lt“請輸入要刪除的學生ID“

CIN & gt;& gtk;

stu . putkey(k);

P1=list1。找(斯圖);

if(p 1!=NULL)

P1=list1。delete node(p 1);

刪除p 1;

列表1。print list();

cout & lt& lt“列表1長度:“

}

else cout & lt& lt“找不到“

cout & lt& ltendl

列表1。make empty();//空列表1

cout & lt& lt“清空後列表1的長度:“

infile . open(“exp 19 _ 1 . txt“,IOs::in);

infile . clear();//如果文本文件在結尾前缺少回車符,沒有這句話會出錯。

如果(!infile)

cout & lt& lt“無法打開文件“

返回1;

}

for(I = 0;我& lt9;i++){

infile>& gtk;

stu . putkey(k);

infile>& gtnam

斯圖·普特南(Nam);

P1=list3。CreatNode(斯圖);

列表3。insert order(p 1);//按升序創建list1。

}

infile . close();

列表3。print list();

cout & lt& ltendl

返回0;

}

這是壹個頭文件:

# include & ltiostream & gt

使用命名空間std

//首先看節點組織,使用節點類,所有與節點數據和指針操作相關的函數都作為成員函數。

模板& lt鍵入名稱T & gt班級名單;

模板& lt鍵入名稱T & gt類別節點{

t信息;//數據字段

節點& ltT & gt*鏈接;//指針字段

公共:

node();//生成頭節點的構造函數。

節點(常數T & amp數據);//生成通用節點的構造函數

void insert after(Node & lt;T & gt* P);//在當前節點後插入壹個節點。

節點& ltT & gt* remove after();//刪除當前節點的後繼節點,並返回此節點以備後用。

好友類別列表& ltT & gt;

//使用列表作為友元類,列表可以直接訪問節點的私有成員,這與結構壹樣方便,但更安全。

};

模板& lt鍵入名稱T & gt節點& ltT & gt* Node(){ link = NULL;}

模板& lt鍵入名稱T & gt節點& ltT & gt*節點(const T & amp數據){

info = data

link = NULL

}

模板& lt鍵入名稱T & gt空節點& ltT & gt* insert after(Node & lt;T & gt* p ){

p-》;link =鏈接;

link = p;

}

模板& lt鍵入名稱T & gt節點& ltT & gt*節點& ltT & gt* remove after(){

節點& ltT & gt* tempP = link

if(link = = NULL)tempP = NULL;//在鏈的末端,它後面沒有節點。

else link = tempP-& gt;鏈接;

返回tempP

}

//重新定義鏈表類並選擇常用操作,包括建立有序鏈表、查找遍歷、插入、刪除和取出數據。

模板& lt鍵入名稱T & gt課程列表{

節點& ltT & gt*頭,*尾;//鏈表頭指針和尾指針

公共:

list();//生成頭節點的構造函數(空鏈表)

~ List();//析構函數

void make empty();//清空鏈表,只留下頭節點。

節點& ltT & gt*查找(測試數據);//搜索具有相同數據域的節點並返回該節點的地址。

int Length();//計算單鏈表的長度

void print list();//打印鏈表的數據字段。

void insert front(Node & lt;T & gt* p);//它可以用於向前生成壹個鏈表並在頭中插入壹個節點。

void insert rear(Node & lt;T & gt* p);//可以用來向後生成壹個鏈表,並在表的末尾添加壹個節點。

void InsertOrder(節點& ltT & gt* p);//按升序生成鏈表

節點& ltT & gt*CreatNode(測試數據);//創建節點(孤立節點)

節點& ltT & gt* delete Node(Node & ltT & gt* p);//刪除指定的節點

};

模板& lt鍵入名稱T & gt列表& ltT & gt* List(){

head = tail =新節點& ltT & gt();

}

模板& lt鍵入名稱T & gt列表& ltT & gt::~ List(){

make empty();

刪除標題;

}

模板& lt鍵入名稱T & gt無效列表& ltT & gt* make empty(){

節點& ltT & gt* tempP

while(head-》;鏈接!=NULL)

tempP = head-& gt;鏈接;

head-》;link=tempP->。鏈接;//從鏈中分離頭節點之後的第壹個節點。

刪除tempP//刪除(釋放)分離節點

}

尾巴=頭;//頭指針和尾指針都指向頭節點,表示鏈為空。

}

模板& lt鍵入名稱T & gt節點& ltT & gt*列表& ltT & gt*查找(測試數據){

節點& ltT & gt* tempP = head-& gt;鏈接;

而(tempP!= NULL & amp& amptempP-& gt;信息!= data)tempP = tempP-》;鏈接;

返回tempP//如果搜索成功則返回節點地址,如果搜索不成功則返回NULL。

}

模板& lt鍵入名稱T & gtint List & ltT & gt*長度(){

節點& ltT & gt* tempP = head-& gt;鏈接;

int count = 0;

而(tempP!=NULL)

tempP = tempP-& gt;鏈接;

count++;

}

返回計數;

}

模板& lt鍵入名稱T & gt無效列表& ltT & gt* print list(){

節點& ltT & gt* tempP = head-& gt;鏈接;

而(tempP!=NULL)

tempP-& gt;info . show();

tempP = tempP-& gt;鏈接;

}

cout & lt& ltendl

}

模板& lt鍵入名稱T & gt無效列表& ltT & gt* insert front(Node & lt;T & gt* p ){

p-》;link = head-& gt;鏈接;

head-》;link = p;

if(tail = = head)tail = p;

}

模板& lt鍵入名稱T & gt無效列表& ltT & gt* insert rear(Node & lt;T & gt* p ){

p-》;link = tail-& gt;鏈接;

尾巴-》;link = p;

tail = p;

}

模板& lt鍵入名稱T & gt無效列表& ltT & gt* insert order(Node & lt;T & gt* p ){

節點& ltT & gt* tempP = head-& gt;link,* tempQ = head//tempQ指向tempP前面的節點。

而(tempP!=NULL)

if(p-》;信息& lttempP-& gt;info)break;//找到比插入的節點大的第壹個節點,並通過tempP指向它。

tempQ = tempP

tempP = tempP-& gt;鏈接;

}

tempQ-& gt;insert after(p);//在指向節點的tempP之前和tempQ之後插入。

if(tail = = tempQ)tail = tempQ-& gt;鏈接;

}

模板& lt鍵入名稱T & gt節點& ltT & gt*列表& ltT & gt* creat node(T data){//創建壹個新節點。

節點& ltT & gt* tempP =新節點& ltT & gt(數據);

返回tempP

}

模板& lt鍵入名稱T & gt節點& ltT & gt*列表& ltT & gt* delete Node(Node & lt;T & gt* p ){

節點& ltT & gt* tempP = head

while(tempP-》;鏈接!= NULL & amp& amptempP-& gt;鏈接!= p)tempP = tempP-& gt;鏈接;

if(tempP-& gt;link = = tail)tail = tempP;

返回tempP-& gt;remove after();

}