#include#include #define LIST_INIT_SIZE 100#define OK 1#define OVERFLOW -2#define ERROR 0typedef int Status;typedef int ElemType;typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域}LNode,*LinkList;Status InitList_L(LinkList &L){ //构造一个空的链表 L=new LNode; if(!L) exit(OVERFLOW); L->next=NULL; return OK;}//InitList_Lvoid ListCreate_L(LinkList &L,int n){ //创建链表 尾插法 ElemType x; LNode *p; cout<<"input x(n)="< 0;--i) { p=new LNode; if(!p) exit(OVERFLOW); cin>>x; p->data=x; p->next=L->next;L->next=p; }}//ListCreate_LStatus GetElem_L(LinkList L,int i,ElemType &e){ //L是带头结点的链表的头指针,以e返回第i个元素 LNode *p; int j; p=L->next; j=1; //p指向第一个结点,j为计数器 while(p && j next; ++j; } //顺指针向后查找,直到p指向第i个元素,或p为空 if(!p || j>i) return ERROR; //第i个元素不存在 e=p->data; //取得第i个元素 return OK;}//GetElem_LStatus ListInsert_L(LinkList &L,int i,ElemType e){ //L为带头结点的单链表的头指针,本算法 //在链表中第i个结点之前插入新的元素 e LNode *p,*q; int j; p=L; j=0; while(p && j next; ++j; } //寻找第i-1个结点 if(!p || j>i-1) return ERROR; //i大于表长或者小于1 q=new LNode; //生成新结点 q->data=e; q->next=p->next; p->next=q; //插入 return OK;}//LinstInsert_LStatus ListDelete_L(LinkList &L,int i,ElemType &e){ //删除以L为头指针(带头结点)的单链表中第i个结点 LNode *p,*q; int j; p=L; j=0; while(p->next && j next; ++j; } //寻找第i个结点,并令p指向其前趋 if(!(p->next) || j>i-1) return ERROR; //删除位置不合理 q=p->next; p->next=q->next; //删除并释放结点 e=q->data; delete q; return OK;}//ListDelete_Lvoid visit_L(LinkList L){ LNode *p=L->next; while(p) { cout< data<<" "; p=p->next; } cout<