SLinkList
/*链式存chu(单链表)*/
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
typedef int Elemtype;
//单链表结构
typedef struct Node
{
Elemtype data;
Node *next;
}Node,*Linklist;
bool InitList(Linklist &L)//单链表初始化
{
L=new Node;//L为空节点,next指向a1
if(!L){return false;}
L->next=NULL;
return true;
}
bool GetElem(Linklist L,int i,Elemtype &e)//单链表取值
{
Linklist p;
p=L->next;int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i){return false;}
e=p->data;
return true;
}
Node *LocateElem(Linklist L,Elemtype e)//单链表按值查找,返回该节点
{
Linklist p=new Node;
p=L->next;
while(p&&p->data!=e)
{
p=p->next;
}
return p;
}
bool ListInsert(Linklist &L,int i,Elemtype e)//单链表插入操作
{
Linklist p=L;int j=0;
while(p&&j<i-1)
{p=p->next;++j;}
if(!p||j>i-1){return false;}
Linklist s =new Node;
s->data=e;
s->next=p->next;
p->next=s;
return false;
}
bool ListDelete(Linklist &L,int i)//单链表删除操作
{
Linklist p=L;int j=0;
while((p->next)&&(j<i-1))
{
p=p->next;++j;
}
if(!(p->next)||(j>i-1)){return false;}
Linklist temp=new Node;
temp=p->next;
p->next=temp->next;
free(temp);
return true;
}
void CreateList(Linklist &L,int n)//正序输入创建单链表
{//采用尾插法
Linklist r=new Node;
r=L;
for(int i=0;i<n;++i)
{
Linklist p=new Node;
cin >> p->data;
p->next=NULL;
r->next=p;
r=p;
}
//r->next=L->next;(循环队列)
}
void PrintList(Linklist L)
{
Linklist p=L;
while(p->next!=NULL)//(p->next!=L->next)(循环队列)
{
p=p->next;
cout << p->data << " ";
}
}
int main()
{
Linklist L;
InitList(L);
CreateList(L,5);
PrintList(L);
Elemtype TEMP;
GetElem(L,3,TEMP);
cout <<endl<<"third:" <<TEMP << endl;
Node *pl=LocateElem(L,4);
if(pl){cout <<pl->data<<endl;}
Elemtype insert_var=8;
ListInsert(L,3,insert_var);
PrintList(L);
cout << endl;
ListDelete(L,3);
PrintList(L);
cout << endl;
return 0;
}