数据结构-线性表-链表
线性表的定义:由n(n>=0)个数据特性相同的元素构成的有限序列,称为线性表。文章来源:https://www.toymoban.com/news/detail-718083.html
1.数据类型声明
#include<iostream>
using namespace std;//使用std命名空间,省略后续代码中得到std::前缀
#define OK 1//定义一个宏,使用OK表示操作成功
#define ERROR 0//定义一个宏。使用ERROR表示操作失败
#define OVERFLOW -2//定义宏,表示溢出操作
typedef int Status;//重命名为status用于表示函数的返回状态
typedef int ElemType;//重命名为ElemType用于表示线性表数据元素类型
2.链表
typedef struct Node{
ElemType data;
struct Node *next;
}Node,Link;
3.初始化
初始化只需要把头节点的next给进行初始化即可,data数据直接放空,变成头结点方便下面的数据操作。
也可以理解为放弃一部分空间,提高程序运行速度。文章来源地址https://www.toymoban.com/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){//把指针移动到要插入的位置
//TODO
p=p->next;
j++;
}
if(!p||i<1){//i的合法性
//TODO
return ERROR;
}
//创建一个新结点放值,再把新节点放入链表中
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){//移动指针到要获取的结点
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是否在链表内
//TODO
if(p->data==e){
//TODO
return i;//也可以返回结点的地址
}
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++){//指向要删除结点的前一个结点
//TODO
if(p==NULL) return ERROR;
p=p->next;
}
t=p->next;
p->next=t->next;
delete t;
return OK;
}
8.测试
int main(){
Link link;
init(&link);
ElemType e=0;
cout<<"请输入5个需要放入的元素"<<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<<"请输入要查找的数据:";
cin>>e;
cout<<LocateElemTyp(link,e);
cout<<endl;
cout<<"输入要删除元素的位置";
int i;
cin>>i;
deleteElem(&link,i);
cout<<endl;
cout<<"链表中的元素:";
for(int i=1;i<=5;i++){
//TODO
cout<<" "<<GetElem(link,i);
}
return 0;
}
到了这里,关于数据结构-线性表-链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!