#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//数据结构
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode, * LinkList;
//函数声明
int menu_select();
void CreateList_L(LinkList& L, int n);
void PrintList_L(LinkList L);
Status GetElem_L(LinkList L, int i, ElemType& e);
Status ListInsert_L(LinkList& L, int i, ElemType e);
Status ListDelete_L(LinkList& L, int i, ElemType& e);
Status LocateElem_L(LinkList L, ElemType e);
int main()
{
LinkList L{};
int n;
for (;;)
{
switch (menu_select())
{
case 1:
printf("please input the number of the component:");
scanf("%d", &n);
CreateList_L(L, n);
printf("finished\n");
break;
case 2:
PrintList_L(L);
break;
case 3:
printf("Calling GetElem_L \n");
GetElem_L(L, i, e);
break;
case 4:
printf("Calling ListInsert_L\n");
ListInsert_L( L, i, e); //调用函数
break;
case 5:
printf("Calling ListDelete_L\n");
Status ListDelete_L(LinkList & L, int i, ElemType & e); //调用函数
break;
case 6:printf("Calling LocateElem_L\n");
LinkList LocateElem_L(LinkList L, ElemType e); //调用函数
break;
case 0:
printf("finished,thanks \n\n");
exit(0);
}
}
return 0;
}
int menu_select()
{
int sn;
printf("\n show menu \n");
printf("1.create\n");
printf("2.show\n");
printf("3.get\n");
printf("4.insert\n");
printf("5.delete\n");
printf("6.find\n");
printf("0.exit\n");
printf("input 0-6:");
for (;;)
{
scanf("%d", &sn);
if (sn < 0 || sn>6)
printf("\n error reselect 0-6:");
else
break;
}
return sn;
}
//创建单链表,头插法,已知线性表的长度1
void CreateList_L(LinkList& L, int n)
{
LinkList p;
int i;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
printf("input number%d:\n", n);
for (i = n; i >= 1; i--)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%d", &p->data); //格式输入字符串补出来
p->next = L->next;
L->next = p;
}
}
//输出单链表2
void PrintList_L(LinkList L)
{
LinkList p;
p = L->next;
printf("output:\n");
while (p)
{
printf("%d\t", p->data);
p = p->next;
}
printf("\n");
}
//其他功能的提示:
//取元素函数3
int GetElem_L(LinkList L, int i, ElemType& e)
{
LinkList p;
int j;
p = L->next; j = 1;
while (p && j < 1)
{
p = p->next;
++j;
}
if (!p || j > i)
return ERROR;
e = p->data;
return OK; //请补充
}
//插入函数4
Status ListInsert_L(LinkList& L, int i, ElemType e)
{
LinkList p;
LinkList s;
int j;
p = L; j = 0;
while (p && (j < i - 1))
{
p = p->next; ++j;
}
if (!p || j > i - 1) return 0;
s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
//请补充
}
//删除函数5
Status ListDelete_L(LinkList& L, int i, ElemType& e)
{
LinkList p;
LinkList q;
int j;
p = L; j = 0;
while ((p->next) && (j < i - 1))
{
p = p->next;
++j;
}
if (!(p->next) || (j > i - 1))
return ERROR;
q = p->next;
p->next = q->next;
delete q;
return OK;
//请补充
}
//取元素6
int LocateElem_L(LinkList L, ElemType e)//找到返回逻辑位序,未找到返回0
{
LinkList P;
int K = 0;
P = L;
while (P != NULL && K < e)
{
P = P->next;
K++;
}
if (P == NULL)
{
return 0;
}
}
i,和e为啥显示无定义