#include
#include
#include
#include
#define OK 1
#define ERROR 0
typedef int Status;
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//单链表的初始化
Status InitList(LinkList &L)
{
L=new LNode;
L->next=NULL;
return OK;
}
//单链表的建立
void CreateList_R(LinkList &L,int n)
{
LinkList p;
L=new LNode;
L->next=NULL;
LinkList q=L;
int i;
for(i=0;i
{
p=new LNode;
cin>>p->data;
p->next=NULL;
q->next=p;
q=p;
}
}
//单链表的取值
Status GetElem(LinkList L,int i,ElemType &e)
{
LinkList p=L->next; int j=1;
while(p&&j
{
p=p->next;
++j;
}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}
//单链表的按值查找
LNode *LocateElem(LinkList L,ElemType e)
{
LinkList p=L->next;
while (p && p->data!=e)
p=p->next;
return p;
}
//单链表的按位置删除
Status ListDelete(LinkList &L,int i)
{
LinkList p=L; int j=0;
while((p->next) && (j
{p=p->next;++j;}
if(!(p->next)||(j>i-1)) return ERROR;
LinkList q=p->next;
p->next=q->next;
delete q;
return OK;
}
//单链表的遍历
Status PrintLink(LinkList L)
{
LinkList P = L->next;
while (P != NULL)
{
printf("%d ",P->data);
P = P->next;
}
printf("\n");
return OK;
}
//单链表的表长
int Length(LinkList L)
{
LinkList p=L->next;int i=0;
while (p)
{
i++;
p=p->next;
}
return i;
}
//单链表的销毁
void DestroyList(LinkList &L)
{
LinkList p;
LinkList q;
p=L;
q=p->next;
while(p!=NULL)
{
free(p);
p=q;
q=p->next;
}
}
void main(int argc, char* argv[])
{
LinkList MyList;
ElemType x;
int pos,y;
int c;
int n1;
while(true)
{
printf("------单链表的基本操作------------\n");
printf("------1.单链表的初始化------------\n");
printf("------2.线性表的建立---------------\n");
printf("------3.线性表的遍历---------------\n");
printf("------4.线性表的按位置插入---------\n");
printf("------5.线性表的表长---------------\n");
printf("------6.线性表按位置删除------------\n");
printf("------7.按位置查询线性表的元素------\n");
printf("------8.退出------------------------\n");
printf("请输入要操作的步骤:\n");
scanf("%d",&c);
switch(c){
case 1:
if(InitList(MyList)==OK)
{
printf("线性表初始化成功!\n");
}
else
printf("线性表初始化失败!\n");
break;
case 2:
CreateList_R(MyList)
break;
case 3:
Printout(MyList);
break;
case 4:
printf("请输入你要插入的数据:");
scanf("%d",&x);
printf("请输入你要插入的位置:");
scanf("%d",&pos);
if(ListInsert(MyList,pos,x)==OK)
{
printf("插入成功:\n");
printf("插入后的数据为:\n");
Printout(MyList);
}
else
{
printf("插入失败:\n");
}
break;
case 5:
n1=ListLength(MyList);
printf("线性表的长度%d\n",n1);
break;
case 6:
printf("请输入你要删除元素的位置:");
scanf("%d",&y);
if(ListDelete(MyList,y)==OK)
{
printf("\n线性表删除成功\n");
printf("线性表删除后的数据:\n");
Printout(MyList);
}
else
printf("删除失败:\n");
break;
case 7:
printf("你选择数据的位置是:");
scanf("%d",&n1);
if(GetElem(MyList,n1,x)==ERROR)
printf("i值不合法/n");
else
printf("第%d个元素的值为%d\n",n1,x);
break;
case 8:
exit(OK);
default:
printf("输入错误!");
}
}
}