#include<stdio.h>
//#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreateLink_L(LinkList &L,int n)
{// 算法2.12 创建含有 n 个元素的单链表(后插法)
LinkList p,q;
int i;
ElemType e;
// L=(LinkList)malloc(sizeof(LNode));
L=new LNode;
L->next=NULL;// 先建立一个带头结点的单链表
//q=(LinkList)malloc(sizeof(LNode));
//q=new LNode;
q=L;//尾指针q初始化指向链表头结点L,
for(i=0;i<n;i++)
{
scanf("%d",&e);
//p=(LinkList)malloc(sizeof(LNode));
p=new LNode;// 生成新结点,p指向新生成的结点
// 请补全代码
p->data=e;
p->next=q->next;
q->next=p;//p插入到q之后
//q=q->next;//q指向新的表尾
q=p;//q指向新的表尾
}
return OK;
}
int LoadLink_L(LinkList &L)
{//遍历输出单链表
LinkList p=L->next;//p指向首元结点
if(!p) // 请填空
printf("The List is empty!");//提示空表信息
else
{
printf("The LinkList is:");
while(p) // 请填空
{
printf("%d ",p->data);//通过循环,依次输出各元素
p=p->next; // 请填空
}
}
printf("\n");
return OK;
}
int LinkInsert_L(LinkList &L,int i,ElemType e)// 请补全代码
{// 算法2.9,在带头结点的单链表L中第i个位置插入值为e的结点
LNode *p=L,*s;//定义指针变量p,初始化指向链表头结点L
int j=0;
while(p&&j<i-1)//当输入的插入位置合法,则通过循环,定位到插入位置处
{
p=p->next;
j++;
}
if(!p||j>i-1)//当>n+1或者<1
return ERROR;
//s=(LinkList)malloc(sizeof(LNode));
s=new LNode;//生成新结点
s->data=e;
s->next=p->next;//将新结点插入p后
p->next=s;
return OK;
}
int LinkDelete_L(LinkList &L,int i,ElemType &e)// 请补全代码
{// 算法2.10,在带头结点的单链表L中,删除第i个元素,将被删除元素值保存到e中
LNode *p=L,*q;
int j=0;
while(p->next&&j<i-1)//查找第i-1个结点,即被删除元素的前一结点
{
p=p->next;
j++;
}
if(!(p->next)||j<i-1)//非法删除位置则提示错误
return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
delete(q);
return OK;
}
int main()
{
LinkList T;
int a,n,i;
ElemType x,e;
printf("Please input the init size of the linklist:\n");
scanf("%d",&n);
printf("Please input the %d element of the linklist:\n",n);
if( CreateLink_L(T,n) )// 判断链表是否创建成功,请填空
{
printf("A Link List Has Created.\n");
LoadLink_L(T);
}
while(1)
{
printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
scanf("%d",&a);
switch(a)
{
case 1:scanf("%d%d",&i,&x);
if( !LinkInsert_L(T,i,x) )// 请填空
printf("Insert Error!\n");
else
printf("The Element %d is Successfully Inserted!\n",x);
break;
case 2:scanf("%d",&i);
if( !LinkDelete_L(T,i,e) )// 请填空
printf("Delete Error!\n");
else
printf("The Element %d is Successfully Deleted!\n",e);
break;
case 3:LoadLink_L(T);
break;
case 0:return 1;
}
}
}
评论0