#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
typedef int ElemType;
typedef struct LNode {
ElemType date;
struct LNode *next;
}*link;
link InitList()
{
link L=(link)malloc(sizeof(LNode));
if(!L)
{
cout<<"内存分配错误!";
exit(1);
}
L->next=NULL;
L->date=-1;
printf("链表已经建立/n按任意键进入主菜单");
getch();
return L;
}
void ListInsert(link L,int i,ElemType e)
{
link p=L,q;
int j=0;
if(!(p->next)&&i>1)
{
printf("所输入位置大于表长/n操作失败,按任意键返回");
getch();
return;
}
while(p&&j<i-1)
{
p=p->next;++j;
}
if(!p||j>i-1)
{
printf("所输入位置大于表长/n操作失败,按任意键返回");
getch();
return;
}
q= (link)malloc(sizeof(LNode));
if(!q){
cout<<"内存分配错误!";
return;
}
q->date=e;
q->next=p->next; //插入L中;
p->next=q;
printf("结点已经插入/n按任意键返回!");
getch();
}
void ListDelete_L(link L,int i)
{
link p=L,q;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1||!(L->next)||!(p->next))
{
printf("被删去数据位置不正确!操作失败,按任意键返回!");
getch();
return;
}
q=p->next;
p->next=q->next;
free(q);
printf("结点已经删除/n按任意键返回!");
getch();
}
void show(link L)
{
link p=L;
while(p->next!=NULL)
{
cout<<p->next->date<<endl;
p=p->next;
}
printf("/n按任意键返回!");
getch();
}
void main()
{
link L=InitList();
char ch;
int t,i;
lable1:
system("cls");
printf("按1插入结点/n按2删除结点/n按3显示数据/n按其它任意键退出/n");
ch=getch();
switch(ch)
{
case '1':
cout<<"插入结点"<<endl;
cout<<"输入要插入的数据"<<endl;
cin>>t;
cout<<"/n输入要插入的位置 ";
cin>>i;
ListInsert(L,i,t) ;
goto lable1;
case '2':
cout<<"删除结点"<<endl;
cout<<"输入要删除结点的位置"<<endl;
cin>>i;
ListDelete_L(L,i);
goto lable1;
case '3':
cout<<"/n输出数据"<<endl;
show(L);
goto lable1;
default :
exit(0);
}
}