#include<stdio.h>
#include <stdlib.h>
struct Link
{
int data;
struct Link *next;
};
bool InsertNode(struct Link *ptr,int Loact);
struct Link *CreatLink(struct Link *ptr);
bool DleteNode(struct Link *pt,int i);
void Print(struct Link *p);
bool Find(struct Link *po,int fl);
int main()
{
int ly,casey;
struct Link *p=(struct Link *)malloc(sizeof(struct Link));
char ch,t;
printf ("是否对表数据进行操作?Y?N .\n");
ch=getchar();
t=getchar();
while((ch=='y')||(ch=='Y'))
{
printf ("请选择你要操作的序号: \n");
printf ("****************************\n");
printf (" 1、建立数据 \n");
printf (" 2、插入元素 \n");
printf (" 3、删除表中元素 \n");
printf (" 4、查找元素 \n");
printf (" 5、列出全部元素 \n");
printf (" 6、退出程序 \n");
printf ("****************************\n");
scanf("%d",&casey);
switch(casey)
{
case 1:
p=CreatLink(p);
break;
case 2:
printf ("请输入你要插入的值的下标.\n");
scanf ("%d",&ly);
if(!InsertNode(p,ly))
{
printf("插入错误!!");
}
else
{
printf("插入元素成功\n");
}
break;
case 3:
printf ("请输入你要删除值的下标\n");
scanf ("%d",&ly);
if(!DleteNode(p,ly))
{
printf("删除错误!!");
}
else
{
printf("删除元素成功\n");
}
break;
case 4:
printf ("请输入你要查找值的下标\n");
scanf ("%d",&ly);
if(!Find(p,ly))
{
printf("查找错误!!");
}
break;
case 5:
Print(p);
break;
default:
exit(0);
}
printf ("是否对链表数据继续操作?Y?N.\n");
ch=getchar();
ch=getchar();
}
system("pause");
return 0;
}
bool InsertNode(struct Link *ptr,int Locat)
{
int i;
struct Link *p;
while(ptr&&i<Locat-1)
{
ptr=ptr->next;
i++;
}
if(!ptr&&i>Locat-1)
return false;
else
{
p=(struct Link *)malloc(sizeof(struct Link));
if(NULL==p)
{
printf("分配内存失败!\n");
return false;
}
printf("请输入插入节点的数据\n");
scanf("%d",&p->data);
p->next=ptr->next;
ptr->next=p;
return true;
}
}
struct Link *CreatLink(struct Link *ptr)
{
int len,cou;
printf("输入头结点数据\n");
scanf("%d",&ptr->data);
struct Link *p,*h=ptr;
printf("请输入你要建立链表的长度\n");
scanf("%d",&len);
for(cou=0; cou<len; cou++)
{
p=(struct Link *)malloc(sizeof(struct Link));
printf("请输入第%d个数据\n",cou+1);
scanf("%d",&p->data);
if(NULL==p)
{
printf("分配内存失败!");
exit(0);
}
ptr->next=p;
ptr=p;
}
ptr->next=NULL;
return h;
}
bool DleteNode(struct Link *pt,int i)
{
struct Link *q;
int j=0;
while (pt->next&&j<i-1)
{
pt=pt->next;
j++;
}
if(j>i-1&&!(pt->next))
{
printf("输入的位置不合理");
return false;
}
else
{
q=pt->next;
pt->next=q->next;
free(q);
return true;
}
}
void Print(struct Link *p)
{
int a;
for(a=0;p;a++)
{
printf("第%d个元素是%d\n",a+1,p->data);
p=p->next;
}
}
bool Find(struct Link *po,int fl)
{
int i=0;
while(po->next&&i<fl)
{
i++;
po=po->next;
}
if(i>fl-1&&!(po->next))
{
return false;
}
else
{
printf("查找的元素是%d\n",po->data);
return true;
}
}