单链表操作
准备工作:
a. 建立单链表结构类型
typedef struct Lnode{
int data;
Lnode *next;
}Lnode,*LinkList;
b. 准备一个“show()”函数用来展示单链表
void show(LinkList &T){
Lnode* p;
p = T->next;
if(!p){
cout<<"链表为空"<<endl;;
}else{
while(p){
cout<<p->data<<endl;;
p =p->next;
}
}
}
操作1. 单链表的创建
a. 头插法创建单链表
void CreateList_H(LinkList &T){
T = new Lnode;
T->next = NULL;
Lnode *p;
p = new Lnode;
while(cin>>p->data){
p->next = T->next;
T->next = p;
p = new Lnode;
}
}
b. 尾插法创建单链表
void CreateList_R(LinkList &T){
T = new Lnode;
Lnode *r=T;
Lnode *p;
p = new Lnode;
p->next= NULL;
while(cin>>p->data){
r->next= p;
r= p;
p = new Lnode;
p->next= NULL;
}
}
操作2. 单链表的清空和销毁
void ClearList(LinkList &T){
Lnode *p = T->next;
Lnode *q;
while(p){
q = p;
p = p->next;
delete(q);
}
T->next = NULL;
cout<<"SUCCESS!!!"<<endl;
}
void DestroyList(LinkList &T){
Lnode *p = T;
while(T){
p = T;
T = T->next;
delete(p);
}
cout<<"SUCCESS!!!"<<endl;
}
操作3. 求单链表长度
void ListLength(LinkList &T){
Lnode *p = T->next;
int i = 0;
while(p){
i++;
p = p->next;
}
cout<<"单链表长度为:"<<i<<endl;
}
操作4. 按值查找和按位置查找
int GetElem(LinkList &T,int i,int &e){
Lnode* p = T->next;
int j = 1;
while(j<i){
p=p->next;
j++;
}
e = p->data;
cout<<e<<endl;
return 0;
}
int LocateList(LinkList T,int e){
Lnode *p = T->next;
int i= 1;
while(p&&p->data!=e){
p = p->next;
i++;
}
cout<<"值为:"<<e<<"的结点为第"<<i<<"个结点"<<endl;
return 0;
}
操作5. 单链表的插入
int InsertList(LinkList &T,int i,int &e){
Lnode *p = T;
for(int j=1;j<i;j++){
p = p->next;
}
Lnode *q;
q = new Lnode;
q->data = e;
q->next = p->next;
p->next = q;
cout<<"单链表插入成功"<<endl;
return 1;
}
操作6. 单链表的删除
int deleteLnode(LinkList &T,int i,int &e){
Lnode *p = T;
for(int j=1;j<i;j++){
p = p->next;
}
e = p->next->data;
p->next = p->next->next;
cout<<"已删除"<<e<<endl;
return 0;
}
完整操作:
#include<bits/stdc++.h>
using namespace std;
typedef struct Lnode{
int data;
Lnode *next;
}Lnode,*LinkList;
void CreateList_H(LinkList &T);
void show(LinkList &T);
void CreateList_R(LinkList &T);
void ClearList(LinkList &T);
void DestroyList(LinkList &T);
void ListLength(LinkList &T);
int GetElem(LinkList &T,int i,int &e);
int LocateList(LinkList T,int e);
int InsertList(LinkList &T,int i,int &e);
int deleteLnode(LinkList &T,int i,int &e);
int main(){
LinkList L;
int k;
int m;
int h = 1919810;
CreateList_R(L);
show(L);
ListLength(L);
LocateList(L,114514);
InsertList(L,7,h);
show(L);
deleteLnode(L,7,m);
return 0;
}
void show(LinkList &T){
Lnode* p;
p = T->next;
if(!p){
cout<<"链表为空"<<endl;;
}else{
while(p){
cout<<p->data<<endl;;
p =p->next;
}
}
}
void CreateList_H(LinkList &T){
T = new Lnode;
T->next = NULL;
Lnode *p;
p = new Lnode;
while(cin>>p->data){
p->next = T->next;
T->next = p;
p = new Lnode;
}
}
void CreateList_R(LinkList &T){
T = new Lnode;
Lnode *r=T;
Lnode *p;
p = new Lnode;
p->next= NULL;
while(cin>>p->data){
r->next= p;
r= p;
p = new Lnode;
p->next= NULL;
}
}
void ClearList(LinkList &T){
Lnode *p = T->next;
Lnode *q;
while(p){
q = p;
p = p->next;
delete(q);
}
T->next = NULL;
cout<<"SUCCESS!!!"<<endl;
}
void DestroyList(LinkList &T){
Lnode *p = T;
while(T){
p = T;
T = T->next;
delete(p);
}
cout<<"SUCCESS!!!"<<endl;
}
void ListLength(LinkList &T){
Lnode *p = T->next;
int i = 0;
while(p){
i++;
p = p->next;
}
cout<<"单链表长度为:"<<i<<endl;
}
int GetElem(LinkList &T,int i,int &e){
Lnode* p = T->next;
int j = 1;
while(j<i){
p=p->next;
j++;
}
e = p->data;
cout<<e<<endl;
return 0;
}
int LocateList(LinkList T,int e){
Lnode *p = T->next;
int i= 1;
while(p&&p->data!=e){
p = p->next;
i++;
}
cout<<"值为:"<<e<<"的结点为第"<<i<<"个结点"<<endl;
return 0;
}
int InsertList(LinkList &T,int i,int &e){
Lnode *p = T;
for(int j=1;j<i;j++){
p = p->next;
}
Lnode *q;
q = new Lnode;
q->data = e;
q->next = p->next;
p->next = q;
cout<<"单链表插入成功"<<endl;
return 1;
}
int deleteLnode(LinkList &T,int i,int &e){
Lnode *p = T;
for(int j=1;j<i;j++){
p = p->next;
}
e = p->next->data;
p->next = p->next->next;
cout<<"已删除"<<e<<endl;
return 0;
}