#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType date;//数据域
struct node *next;//指针域
}LNode,*LinkList;
//用尾插法建立链表
LinkList Creat_LinkList1()
{
LinkList H,r,s;
H=(LNode*)malloc(sizeof(LNode));//初始化链表
H->next=NULL;
int x;
r=H;
printf("请输入数据作为结点用-1,暂停:\n");
scanf("%d",&x);
while(x!=-1)
{
s=(LNode*)malloc(sizeof(LNode));
s->date=x;
s->next=r->next;
r->next=s;
r=s;
scanf("%d",&x);//-1表示结束生成子结点
}
r->next=NULL;
return H;
}
//单链表的查找
LinkList Get_LinkList(LinkList H,int k)
{
LinkList p=H;
int j=0;
while(p->next!=NULL&&j<k)
{
p=p->next;
j++;
}
if(j==k)
return p;
else
return NULL;
//没找到,位置错误
}
LinkList Get_LinkList1(LinkList H,int k)
{
LinkList p=H;
int j=0;
while(p->next!=NULL&&j<k)
{
p=p->next;
j++;
}
if(j==k)
return p->date;
else
return NULL;
//链表的插入
}
int Insert_LinkList(LinkList H,int i,ElemType x)//依次输入待插入的链表,插入位置,插入的元素
{
LinkList p,s;
p=Get_LinkList(H,i-1);//调用按值查找位置函数*
if(p==NULL)
{
printf("插入位置错误!");
return -1;//返回-1表示输入位置错误
}
else
{
s=(LinkList)malloc(sizeof(LNode));
s->date=x;
s->next=p->next;
p->next=s;
return 1;//返回1表示插入成功
}
}
//删除节点元素
int Del_LinkList(LinkList H,int i)
{
LinkList p,q;
p=Get_LinkList(H,i-1);
q=p->next;
p->next=q->next;
free(q);
return 1;
}
//判断表是否为空
int ListEmpty(LinkList H)
{
if(H->next==NULL)
return -1;
else
return 1;
}
//计算表长
int length_LinkList(LinkList H)
{
LNode *p=H;
int j=0;
while(p->next!=NULL)
{
p=p->next;
j++;
}
return j;
}
//清空表
LinkList ClearList(LinkList H)
{
H->next=NULL;
}
void output(LinkList H)
{
LinkList p;
p=H->next;
while(p!=NULL)
{
printf("%3d",p->date);
p=p->next;
}
printf("\n");
}
int main()
{
LinkList H1;
int num,i,k;
H1=Creat_LinkList1(); //初始化并且建立链表
output(H1);
printf("请输入待插入数据的位置:\n");
scanf("%d",&i);
printf("请输入待插入数据:\n");
scanf("%d",&k);
Insert_LinkList(H1,i,k);
output(H1);
printf("请输入待删除的位置:\n");
scanf("%d",&i);
Del_LinkList(H1,i);
output(H1);
printf("请输入待查找的位置:");
scanf("%d",&i);
num=Get_LinkList1(H1,i);
printf("该元素是:%d\n",num);
printf("请输入你想取元素的位置:\n");
scanf("%d",&i);
num=Get_LinkList1(H1,i);
printf("这个元素的值为:%d\n",num);
printf("判断表是否为空:\n");
num=ListEmpty(H1);
printf("判断结果为%d,负数为空,正数为非空\n",num);
num=length_LinkList(H1);
printf("表长为:%d\n",num);
ClearList(H1);
printf("表已经被清空!\n");
num=length_LinkList(H1);
printf("表长为:%d\n",num);
}