目录
?一、基本操作
二、 取值(取单链表第i个元素)、按值查找(返回地址/返回位置序号)
三、插入删除结点
?一、基本操作
#include<iostream>
#define OK 1
using namespace std;
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;
//初始化
int InitList_L(LinkList &L){
L=new Lnode;
L->next=NULL;
return OK;
}
//判断是否为空表
int EmptyList(LinkList L){
if(L->next) return 0;
else return 1;
}
//创建表
void CreateList(LinkList &L,int a[],int n){
Lnode *s,*pre;
pre=L;
for(int i=0;i<n;i++){
s=new Lnode;
s->data=a[i];
pre->next=s;
pre=s;
}
pre->next=NULL;
}
//显示表
void show(LinkList L){
while(L->next){
cout<<L->next->data<<" ";
L=L->next;
}
cout<<endl;
}
//销毁表
int DestroyList(LinkList &L){
Lnode *p;
while(L){
p=L;
L=L->next;
delete p;
}
return OK;
}
//清空
int ClearList(LinkList &L){
Lnode *p,*q;
p=L->next;
while(p){
q=p->next;
delete p;
p=q;
}
L->next=NULL;
}
//表长
int ListLength(LinkList L){
L=L->next;
int i=0;
while(L){
i++;
L=L->next;
}
return i;
}
int main(){
int a[]={12,85,4,6,76};
LinkList L;
InitList_L(L);
CreateList(L,a,5);
show(L);
cout<<"空表?(1是/0否)"<<EmptyList(L)<<endl;
cout<<"表长为:"<<ListLength(L)<<endl;
ClearList(L);
cout<<"空表?(1是/0否)"<<EmptyList(L)<<endl;
DestroyList(L);
return 1;
}
二、 取值(取单链表第i个元素)、按值查找(返回地址/返回位置序号)
//取第i个元素
int GetELem(LinkList L,int i){
Lnode *p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) return ERROR;
int e=p->data;
return e;
}
//按值查找(返回地址)
Lnode *LocateElem1(LinkList L,int e){
Lnode *p=L->next;
while(p&&p->data!=e) p=p->next;
return p;
}
//按值查找(返回位置序号)
int LocateELem2(LinkList L,int e){
Lnode *p=L->next;
int j=1;
while(p&&p->data!=e){
p=p->next;
++j;
}
if(p) return j;
else return 0;
}
三、插入删除结点
//插入结点
int ListInsert_L(LinkList &L,int i,int e){
Lnode *p=L->next;
int j=1;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR; //判断位置是否合法
Lnode *s=new Lnode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
//删除结点
int ListDelete_L(LinkList &L,int i){
Lnode *p=L->next;
int j=1;
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next)||j>i-1) return ERROR; //判断位置是否合法
Lnode *q=p->next;
p->next=q->next;
int e=q->data;
delete q;
return e; //返回删除结点的值
}
ps:二、三结果
|