#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode{
int data;
struct LinkNode* next;
}LinkNode,* LinkList;
void InitLinkList(LinkList& L)//初始化一个空表
{
L=(LinkList)malloc(sizeof(LinkNode));
L->next=NULL;
}
void Insert_head(LinkList &L,int e)//利用头插法 插入e
{
LinkList s=(LinkList)malloc(sizeof(LinkNode));
s->data=e;
s->next=L->next;
L->next=s;
}
void Insert_end(LinkList &L,LinkList &p,int e)//利用尾插法 插入e
{
LinkList s=(LinkList)malloc(sizeof(LinkNode));
s->data=e;
s->next=NULL;
p->next=s;
p=p->next;
}
void PrintLinkList(LinkList L)//打印链表 方便测试
{
L=L->next;
while(L!=NULL)
{
printf("%4d",L->data);
L=L->next;
}
printf("\n");
}
LinkList LocationLinkList(LinkList L,int i)//按位置查找 查找链表中第i个位置的元素
{
L=L->next;
int j=1;
while(L!=NULL)
{
if(j==i)
{
return L;
}
L=L->next;
j++;
}
return NULL;
}
int LocateLinkList(LinkList L,int e)//按值查找,查找元素e在表中的位置
{
L=L->next;
int j=1;
while(L!=NULL)
{
if(L->data==e)
{
return j;
}
L=L->next;
j++;
}
return -1;
}
bool Insert(LinkList &L,int i,int e)//在第i个位置 前插入e
{
LinkList p=LocationLinkList(L,i-1);//找到插入位置的前一个结点
if(p!=NULL||p->next!=NULL)
{
LinkList s=(LinkList)malloc(sizeof(LinkNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
return false;
}
bool DelLinkList(LinkList &L,int i)//删除第i个位置的元素
{
LinkList p=LocationLinkList(L,i-1);//找到删除位置的前一个结点
if(p!=NULL||p->next!=NULL)
{
LinkList q=p->next;
p->next=q->next;
free(q);
return true;
}
return false;
}
int main()
{
LinkList L;
InitLinkList(L);
LinkList p=L;//尾插法的指向最后一个元素的指针
//Insert_head(L,5);
//Insert_head(L,6);
Insert_end(L,p,44);
Insert_end(L,p,33);
Insert_end(L,p,22);
Insert_end(L,p,11);
PrintLinkList(L);
LinkList q=LocationLinkList(L,4);
printf("q->data=%d\n",q->data);
int m2=LocateLinkList(L,10);
if(m2!=-1)
printf("m2=%d\n",m2);
else
printf("表中无该数据!\n");
Insert(L,4,55);
PrintLinkList(L);
DelLinkList(L,4);
PrintLinkList(L);
return 0;
}