#include<iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;
int length ;
struct LNode *next;
}LNode ,*LinkList;
void Print(LinkList &L)
{
LinkList p = L->next;
if(L->length == 0)
cout<<"空表!"<<endl;
else if(L->length == 1)
cout<<(char)64<<"->"<<p->data<<endl;
else{
cout<<(char)64;
for(int i = 1;i <= L->length ;++i){
cout<<"->"<<p->data ;
p = p->next;
}
}
cout<<endl;
}
void PrintTitle()
{
cout<<"**********单链表功能选择表************\n"<<endl;
cout<<"1.创建单链表\t2.插入\t3.删除\t4.退出\n"<<endl;
cout<<"**************************************\n";
cout<<"输入你的选择: "<<endl;
}
void CreateList(LinkList &L,int n)
{
//逆位序输入n个元素的值,建立带表头结点的单线性表L
LinkList p;
int i;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;//先建立一个带头结点的单链表
cout<<"请输入"<<n<<"个将要创建的单链表元素:"<<endl;
for(i = n;i > 0;--i){
p = (LinkList)malloc(sizeof(LNode));//生成新结点
cin>>p->data;
p->next = L->next ;L->next = p;//插入到表头
}
L->length = n;
cout<<"创建后的单链表为:"<<endl;
Print(L);
PrintTitle();
}
int ListInsert(LinkList &L,int i, ElemType e)
{
//在带头结点的单链线性表L中第i个位置之前插入元素e
if(i<0||i>L->length + 1)
cout<<"插入越界!"<<endl;
else{
LinkList s,p = L;
int j = 0;
while(p&&j < i - 1){
p = p->next ;
++j; //寻找第i-1个结点
}
if(!p || j > i-1)return 0;
s = (LinkList)malloc(sizeof(LNode));//生成新结点
s->data = e;s->next = p->next;p->next = s; //插入L中
++L->length;
cout<<"插入元素后的单链表为:"<<endl;
Print(L);
}
PrintTitle();
return 0;
}
int ListDelete(LinkList &L ,int i)
{
//在带头结点的单链线性表L中删除第i个元素,并由e返回其值
if(i<0||i>L->length)
cout<<"删除越界!"<<endl;
else{
LinkList q,p = L;
int j = 0;
while(p->next && j < i-1){ //寻找第i个结点,并令p指向其前驱
p = p->next;
++j;
}
if(!(p->next)||j>i-1)return 0;
q = p->next;p->next = q->next ; //删除并释放结点
//e = q->data ;
free(q);
--L->length ;
cout<<"删除元素后的单链表为:"<<endl;
Print(L);
}
PrintTitle();
return 0;
}
int main()
{
LinkList L = (LinkList)malloc(sizeof(LNode));
L->length = 0;
PrintTitle();
int choice;
while(1)
{
cin>>choice;
if(choice == 4)
return 0;
switch(choice)
{
case 1:
CreateList(L,10);break;
case 2:
{
int i;
int e;
cout<<"输入插入的位置以及插入的元素"<<endl;
cin>>i>>e;
ListInsert(L,i,e);
break;
}
case 3:
{
int i;
cout<<"输入删除的位置"<<endl;
cin>>i;
ListDelete(L,i);
break;
}
default:
cout<<"make sure your choie between 1 to 4!"<<endl;
break;
}
}
getchar();
return 0;
}