单链表的初始化,增删改查主要思想记录
#include <iostream>
using namespace std;
typedef struct LNode{
int data;
LNode *next;
}*LinkList;
//在第i位后面添加e
bool NextInsert(LinkList L,int i,int e){
if(i<1||L->next==NULL)
return false;
LNode *p=new LNode;
p=L->next;
for(int j=0;p!=NULL&&j<i-1;j++){
p=p->next;
}
LNode *r=new LNode;
r->next=p->next;
r->data=e;
p->next=r;
return true;
}
//按序号查找
LNode *GetElem(LinkList L,int i){
if(i<1)
return NULL;
if(i==0)
return L;
LNode *p=new LNode;
p=L->next;
for(int j=0;p!=NULL&&j<i-1;j++){
p=p->next;
}
return p;
}
//按值查找
int LocateElem(LinkList L,int e){
LNode *p=L->next;
int i=1;
while(p!=NULL){
if(p->data==e)
return i;
else{
p=p->next;
i++;
}
}
return 0;
}
//初始化
LNode *List_TailInsert(LinkList L){
L=new LNode[1];
int x;
cin>>x;
LNode *r=L,*p;
while(x!=9999){
p=new LNode;
p->data=x;
r->next=p;
r=p;
cin>>x;
}
p->next=NULL;
return L;
}
//打印单链表
void PrintList(LinkList L){
LNode *p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//释放内存空间
void DeleteList(LinkList &L){
LNode *p=L->next;
LNode *r;
while(p!=NULL){
r=p;
p=p->next;
delete r;
}
}
int main(void){
LinkList L=new LNode;
L->next=NULL;
cout<<"请输入数据,输入9999结束:"<<endl;
L=List_TailInsert(L);
PrintList(L);
int i,x;
cout<<" 请输入在第几位插入几"<<endl;
cin>>i>>x;
if(NextInsert(L,i,x)){
PrintList(L);
}
int j;
LNode *t;
cout<<" 请输入查询第几位"<<endl;
cin>>j;
t=GetElem(L,j);
cout<<t->data<<endl;
cout<<"请输入查询的数值"<<endl;
int k;
cin>>k;
k=LocateElem(L,k);
cout<<k<<endl;
DeleteList(L);
}