#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<malloc.h>
#define ElemType int
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
int Length(LinkList L)
{
int j=0;
LNode *p=L->next;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}
LinkList HeadInsert(LinkList L)
{
LNode *s;
int e;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&e);
while(e!=-1)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=L->next;
L->next=s;
scanf("%d",&e);
}
return L;
}
LinkList TailInsert(LinkList L)
{
int e;
L=(LinkList)malloc(sizeof(LNode));
LNode *s=NULL;
LNode *r=L;
scanf("%d",&e);
while(e!=-1)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=e;
r->next=s;
r=s;
scanf("%d",&e);
}
r->next=NULL;
return L;
}
LNode *GetElem(LinkList L,int i)
{
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1||i>Length(L))
return NULL;
for(j=1;j<i;j++)
p=p->next;
return p;
}
LNode *LocateElem(LinkList L,ElemType e)
{
LNode *p=L->next;
while(p!=NULL&&p->data!=e)
p=p->next;
return p;
}
bool ListInsert(LinkList L,ElemType e,int i)
{
LNode *s=(LNode*)malloc(sizeof(LNode));
LNode *r=GetElem(L,i-1);
if(i<1||i>Length(L))
return false;
s->data=e;
s->next=r->next;
r->next=s;
return true;
}
bool ListDelete(LinkList L,int i)
{
LNode *s=GetElem(L,i);
LNode *r=GetElem(L,i-1);
if(i<1||i>Length(L))
return false;
r->next=s->next;
free(s);
return true;
}
void display(LinkList L)
{
printf("当前单链表内元素是:");
LNode *p=L->next;
for(p=L->next;p!=NULL;)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
LinkList L=NULL;
int e,i,t;
LNode *p=NULL;
printf("请输入任意个数字来组成单链表(头插法):");
L=HeadInsert(L);
display(L);
printf("请输入任意个数字来组成单链表(尾插法):");
L=TailInsert(L);
display(L);
printf("请输入你要查找的元素的位序:");
scanf("%d",&i);
p=GetElem(L,i);
printf("该元素的值为:%d\n",*p);
printf("请输入你要查找的元素的值:");
scanf("%d",&e);
p=LocateElem(L,e);
printf("该元素的地址为:%p\n",p);
printf("请输入你要插入的元素的值:");
scanf("%d",&e);
printf("请输入你要将该元素插入表的位序:");
scanf("%d",&i);
t=ListInsert(L,e,i);
if(t)
printf("插入成功!\n");
else
printf("插入失败!\n");
display(L);
printf("请输入你想删除的元素的位序:");
scanf("%d",&i);
t=ListDelete(L,i);
if(t)
printf("删除成功!\n");
else
printf("删除失败!\n");
display(L);
return 0;
}
|