數(shù)據(jù)結(jié)構(gòu)-線性表-鏈表
線性表的定義:由n(n>=0)個(gè)數(shù)據(jù)特性相同的元素構(gòu)成的有限序列,稱為線性表。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-718083.html
1.數(shù)據(jù)類型聲明
#include<iostream>
using namespace std;//使用std命名空間,省略后續(xù)代碼中得到std::前綴
#define OK 1//定義一個(gè)宏,使用OK表示操作成功
#define ERROR 0//定義一個(gè)宏。使用ERROR表示操作失敗
#define OVERFLOW -2//定義宏,表示溢出操作
typedef int Status;//重命名為status用于表示函數(shù)的返回狀態(tài)
typedef int ElemType;//重命名為ElemType用于表示線性表數(shù)據(jù)元素類型
2.鏈表
typedef struct Node{
ElemType data;
struct Node *next;
}Node,Link;
3.初始化
初始化只需要把頭節(jié)點(diǎn)的next給進(jìn)行初始化即可,data數(shù)據(jù)直接放空,變成頭結(jié)點(diǎn)方便下面的數(shù)據(jù)操作。
也可以理解為放棄一部分空間,提高程序運(yùn)行速度。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718083.html
/**
* @brief 初始化
*
* @param pl
*
* @return
**/
Status init(Link* pl){
pl->next=NULL;
return OK;
}
4.插入
/**
* @brief 插值
*
* @param l 鏈表
* @param i 位置
* @param e 元素
*
* @return
**/
Status LinkInsert(Link *l,int i,ElemType e){
Link *p=l,*t;
int j=0;
while(p&&j<i-1){//把指針移動(dòng)到要插入的位置
//TODO
p=p->next;
j++;
}
if(!p||i<1){//i的合法性
//TODO
return ERROR;
}
//創(chuàng)建一個(gè)新結(jié)點(diǎn)放值,再把新節(jié)點(diǎn)放入鏈表中
t=new Link;
t->data=e;
t->next=NULL;
t->next=p->next;
p->next=t;
return OK;
}
5.取值
/**
* @brief 取值
*
* @param h
* @param i
*
* @return
**/
ElemType GetElem(Link h,int i){
Link *p=h.next;
int j=1;
while(j<i){//移動(dòng)指針到要獲取的結(jié)點(diǎn)
p=p->next;
j++;
}
return p->data;
}
6.查詢
/**
* @brief 查值
*
* @param h
* @param e
*
* @return
**/
int LocateElemTyp(Link h,ElemType e){
Link *p=h.next;
int i=1;
while(p){//e是否在鏈表內(nèi)
//TODO
if(p->data==e){
//TODO
return i;//也可以返回結(jié)點(diǎn)的地址
}
p=p->next;
i++;
}
return ERROR;
}
7.刪除
/**
* @brief 刪除元素
*
* @param h
* @param i
*
* @return
**/
Status deleteElem(Link *h,int i){
Link *p=h,*t;
for(int j=1;j<i;j++){//指向要?jiǎng)h除結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)
//TODO
if(p==NULL) return ERROR;
p=p->next;
}
t=p->next;
p->next=t->next;
delete t;
return OK;
}
8.測(cè)試
int main(){
Link link;
init(&link);
ElemType e=0;
cout<<"請(qǐng)輸入5個(gè)需要放入的元素"<<endl;
for(int i=1;i<=5;i++){
//TODO
cin>>e;
LinkInsert(&link,i,e);
}
cout<<endl;
cout<<"鏈表中的元素:";
for(int i=1;i<=5;i++){
//TODO
cout<<" "<<GetElem(link,i);
}
cout<<endl;
cout<<"請(qǐng)輸入要查找的數(shù)據(jù):";
cin>>e;
cout<<LocateElemTyp(link,e);
cout<<endl;
cout<<"輸入要?jiǎng)h除元素的位置";
int i;
cin>>i;
deleteElem(&link,i);
cout<<endl;
cout<<"鏈表中的元素:";
for(int i=1;i<=5;i++){
//TODO
cout<<" "<<GetElem(link,i);
}
return 0;
}
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)-線性表-鏈表的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!