# C++实现单链表

2021-01-22 12:01:00  阅读：146  来源： 互联网

## 单链表的定义

data 存放数据域，next为指针域

## 单链表的基本操作

1.采用头插法建立单链表

2.采用尾插法建立单链表

3.插入结点操作

4.删除结点操作

C++代码实现

``````#include <iostream>
#include <cstdlib>
using namespace std;

//数据类型
typedef struct{
int x;
}ElemType;

//结点结构体
typedef struct LNode{
ElemType data;
struct LNode *next;

//链表类
public:
//初始化
cout<<"初始化完成"<<endl;
L = new LNode;
L->next=NULL;
}

//头插法
{
LNode *s;//插入的结点指针
ElemType e;
while(true){
cin>>e.x;
if(e.x==0)
break;
s = new LNode;
s->data = e;
s->next=L->next;
L->next=s;
}
}

//尾插法
void Tail_Insert()
{
//*s插入结点指针,r尾指针
LNode *s,*r=L;
ElemType e;
while(true){
cin>>e.x;
if(e.x==0)
break;
s = new LNode;
s->data = e;
r->next = s;
r = s;
}
r->next = NULL;
}

//遍历
void Show(){
LNode *t;
t = L->next;
while(t!=NULL){
int n = t->data.x;
cout<<n<<" ";
t = t->next;
}
cout<<endl<<"=========================="<<endl;
}

//按序号查找返回当前位置的指针
LNode *GetElem(int i){
int j=1;
LNode *p = L->next;
if(i==0){
return L;
}
if(i<1){
return NULL;
}
while(p&&j<i){
p=p->next;
j++;
}
return p;
}

//删除结点操作
void DeleteNode(int loc){
LNode *p = GetElem(loc-1);
LNode *q = p->next;
p->next = q->next;
delete q;
}

//插入结点操作
void Insert_Node(int loc){
LNode *p = GetElem(loc-1);
LNode *s = new LNode;
cout<<"请输入元素的值"<<endl<<">>";
cin>>s->data.x;
s->next = p->next;
p->next=s;
}

//求链表长度
void GetLength(){
int n=0;
LNode *p = L->next;
while(p){
p=p->next;
n++;
}
cout<<n<<endl;
}

//功能选择
void Choice(int c){
int loc;
switch(c){
case '1':
cout<<"头插法建立链表"<<endl;
break;
case '2':
cout<<"尾插法建立链表"<<endl;
Tail_Insert();
break;
case '3':
cout<<"插入结点操作"<<endl;
cout<<"请输入插入位置"<<endl<<">>";
cin>>loc;
Insert_Node(loc);
break;
case '4':
cout<<"删除结点操作"<<endl;
cout<<"请输入删除结点的位置"<<endl;
cin>>loc;
DeleteNode(loc);
break;
case '5':
cout<<"链表的长度"<<endl;
GetLength();
break;
case '0':
cout<<"显示链表"<<endl;
Show();
break;
default:
cout<<"退出程序"<<endl;
exit(0);
break;
}
}
private:
};

int main()
{
char c;
while(true){
cout<<"请输入功能"<<endl<<">>";
cin>>c;
L.Choice(c);
}

return 0;
}

``````

2. 关于本站的所有留言、评论、转载及引用，纯属内容发起人的个人观点，与本站观点和立场无关；
3. 关于本站的所有言论和文字，纯属内容发起人的个人观点，与本站观点和立场无关；
4. 本站文章均是网友提供，不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属；如您发现该文章侵犯了您的权益，可联系我们第一时间进行删除；
5. 本站为非盈利性的个人网站，所有内容不会用来进行牟利，也不会利用任何形式的广告来间接获益，纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。