//单链表的基本操作
#include
using namespace std;
typedef int ElemType;
typedef int Status;
#define ERROR 0;
#define OK 1;
typedef struct LNode{
ElemType Data;
struct LNode *Next;
}LNode ,*LinkList;//注意:struct LNode L=LNode L ;struct LNode *L=LinkList L;
Status InitList(LinkList &L){
L=new struct LNode;
if(!L){
exit(-1);
return ERROR;
}
L->Next=NULL;
}
Status CreatList(LinkList L,int n){//创建链表
int i,m;
cout<<"请输入n给元素的值"<<endl;
LinkList q=L,p;
for(i=1;i<=n;i++){
cin>>m;
p=new struct LNode;
p->Data=m;
p->Next=q->Next;
q->Next=p;
}
return OK;
}
Status TraverseList(LinkList L){//遍历链表
L=L->Next;
while(L){
cout<<L->Data<<endl;
L=L->Next;
}
}
Status InsertList(LinkList &L,int p,ElemType e){ //在第i个位置插入元素e
LinkList q;
q=L;
int j=0;
while(q&&j<p-1){
q=q->Next;
}
if(!q||j>p-1){
cout<<"位置不合理"<<endl;
return ERROR;
}
LinkList h=new struct LNode;
h->Data=e;
h->Next=q->Next;
q->Next=h;
}
Status DeleteList(LinkList &L,int p){//在第p个位置删除
LinkList q,h;
q=L;
int j=0;
while(q->Next&&j>p-1){//同样是找要删除前面的元素,注意与插入的不同
q=q->Next;
j++;
}
if(!q||j<p-1){
cout<<"位置有错误"<<endl;
return ERROR;
}
h=q->Next;
q->Next=h->Next;
delete h;
return OK;
}
Status ClearList (LinkList &L){//清空链表
LinkList p=L->Next,q;
while§{
q=p->Next;
delete p;
p=q;
}
L->Next=NULL;
return OK;
}
Status LocateList(LinkList L,ElemType e){//找到给定元素的位置
int j=0;
L=L->Next;
while(L){
if(L->Data==e){
return j;
L=L->Next;
j++;
}
}
if(!L){
cout<<“链表中无此元素”<<endl;
return ERROR;
}
}
Status GetList (LinkList L,int i,ElemType&e){//找到给定位置的元素并返回
int j=0;
while(j<i&&L) {
L=L->Next;
j++;
}
if(!L||j>i){
cout<<"给定位置有误"<<endl;
return ERROR;
}
return L->Data;
}
Status PriorList(LinkList L,ElemType cur_e,ElemType &e){//找给定元素的前驱
LinkList q=L;
while(q){
if(q->Next->Data=e){
return q->Data;
}
q=q->Next;
}
if(!q){
cout<<"该链表中无给定元素"<<endl;
return ERROR;
}
}
Status DestoryList (LinkList &L) { //销毁元素
LinkList p=L,q;
while(p){
q=p->Next;
delete p;
p=q;
}
}
Status NextList(LinkList L,ElemType cur_e,ElemType &e){//找给定元素的后继
LinkList p=L->Next;
while(p){
if(p->Data==e&&p->Next){
return p->Next->Data;
}
p=p->Next;
}
if(p->Data==e){
cout<<"元素的后继为空"<<endl;
return OK;
}
else
cout<<"该元素在链表不存在"<<endl;
}
Status EmptyList (LinkList L){//判断是否为空
if(!L->Next)
{
cout<<"该链表为空"<<endl;
return ERROR;
}
else{
cout<<"该链表不为空"<<endl;
return OK;
}
}
Status LenghtList(LinkList L){//求链表的长度
int Lenght=0;
while(L){
Lenght++;
L=L->Next;
}
return Lenght;
}
int main (void){
return 0;
}