单链表基本操作实现
#include<iostream>
#include<stdlib.h>
using namespace std;
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Statue;
typedef struct LNode{
ElemType data;
struct LNode*next;
} LinkList;
//初始化链表
LinkList*InitLinkList(LinkList*L)
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
return L;
}
//创建链表
LinkList*CreatList(int len)
{ int i;ElemType e;
LinkList*L=InitLinkList(L);
LinkList*R=L;
for(i=1;i<=len;i++)
{ LinkList*S=(LinkList*)malloc(sizeof(LinkList));
cin>>e;
S->data=e;
R->next=S;
R=S;
}
R->next=NULL;
return L;
}
//求链表长度
int GetLen(LinkList*L)
{ int i=1;
LinkList*R=L->next;
while(R!=NULL)
{ i++;
R=R->next;
}
return i;
}
//将元素插入指定位置
Statue InsertList(LinkList*L,int i,ElemType e)
{ int j;
if(i>GetLen(L)+1||i<1)return ERROR;
LinkList*R=L->next,*S=InitLinkList(S);
S->data=e;
for(j=1;j<=i-2;j++)
R=R->next;
S->next=R->next;
R->next=S;
return OK;
}
//删除指定元素
Statue DeleteList(LinkList*L,int i,ElemType*e)
{
if(i<1||i>GetLen(L))return ERROR;
LinkList*R=L->next,*p;
while(--i>1)
R=R->next;
p=R->next;
*e=p->data;
R->next=p->next;
free(p);
return OK;
}
//查找指定元素
int SearchList(LinkList*L,ElemType e)
{
LinkList*R=L->next;
int i=0;
while(++i<=GetLen(L))
{
if(R->data==e)
{
return i;
break;
}
R=R->next;
}
if (i>GetLen(L))
return ERROR;
}
//输出俩是链表
void PrintList(LinkList*L)
{ LinkList*R=L->next;
cout<<"head";
for(int i=1;i<GetLen(L);i++)
{
cout<<"-->"<<R->data;
R=R->next;
}
cout<<"-->end"<<endl;
}
//判断是否为空链表
Statue IsEmpty(LinkList*L)
{
return(!L->next);
}
//摧毁链表
void DestoryList(LinkList*L)
{
free(L);
}
//运行测试
int main(void)
{ElemType*e,a=3;e=&a;
LinkList*L=CreatList(10);
PrintList(L);
cout<<SearchList(L,5)<<endl;
DeleteList(L,3,e);
PrintList(L);
InsertList(L,6,520);
PrintList(L);
cout<<GetLen(L)<<endl;
}