#include<iostream>
using namespace std;
#define MAXSIZE 100
#define ERROR -1
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode, * LinkList;
//输出
void ListPrintf(LinkList &L)
{
LNode* p = L->next;
while(p)
{
printf("%d ", p -> data);
p = p -> next;
}
printf("\n");
}
//初始化
Status InitList(LinkList& L)
{
L = new LNode;
L->next = NULL;
return 0;
}
//取值
Status GetElem(LinkList L, int i, ElemType& e)
{
LNode* p = L->next;
int j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
return ERROR;
e = p -> data;
return OK;
}
//定位
int LocateElem(LinkList L, ElemType e)
{
LNode* p = L->next;
int k = 1;
while (p && p->data != e)
{
p = p->next;
k++;
}
return k;
}
//插入
Status 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 ERROR;
LinkList s = new LNode;
s -> data = e;
s -> next = p -> next;
p -> next = s;
return OK;
}
//删除
Status 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 ERROR;
LinkList q = p -> next;
p->next = q->next;
delete q;
return OK;
}
//赋值
void CreateList_H(LinkList& L)
{
cout << "长度为:";
int n;
cin >> n;
cout << "输入元素:";
L = new LNode;
L->next = NULL;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
ListInsert(L, i, x);
}
ListPrintf(L);
}
int main()
{
LinkList L;
InitList(L);
CreateList_H(L);
int i;
ElemType x;
cout << "请输入插入的位置和元素:";
cin >> i >> x;
ListInsert(L, i, x);
ListPrintf(L);
cout << "请输入删除的位置:";
cin >> i;
ListDelete(L, i);
ListPrintf(L);
ElemType e;
cout << "请输入查找的位置:";
cin >> i;
GetElem(L, i, e);
cout << e << endl;
cout << "请输入查找的元素:";
cin >> e;
if (!LocateElem(L, e))
cout << "输入的元素" << e << "不在链性表中" << endl;
else
cout << "输入的元素" << e << "在链性表的第" << LocateElem(L, e) << "位中" << endl;
return 0;
}