附上完整代码
#include
#include
#include
#define OK 1
#define ERROR 0
#define TURE 1
#define FALSE 0
#define ElemType int
typedef struct Node
{
ElemType data;
struct Node *next;
} Node,*LinkList;
void CreateTail(LinkList L);
int DelList(LinkList L,int i,ElemType e);
void Get(LinkList L,int i);
void InitList(LinkList *l);
int InsList(LinkList L,int i,ElemType e);
int ListLength(LinkList L);
void Locate(LinkList L,ElemType e);
void main()
{
LinkList k;
int m; //要查找的序号
int n; //要插入的位置
int t; //要删除的位置
char a; //要查找的元素
InitList(&k);
Node *p;
p=k->next;
printf("用尾插法建立单链表,请输入链表数据,以$结束!\n");
CreateTail(k);
while(p!=NULL)
{
printf("%c\n",p->data );
p=p->next;
}
printf("请输入要查找的序号:");
scanf("%d",&m);
printf("查找到的元素是:");
Get(k,m);
printf("\n请输入要查找的元素:");
scanf("%c",&a);
Locate(k,a);
printf("\n请输入要插入的位置:");
scanf("%d",&n);
printf("插入的元素是:");
scanf("%c",&a);
InsList(k,n,a);
printf("插入后的链表是:");
p=k->next;
while(p!=NULL)
{
printf("%c",p->data );
p=p->next;
}
printf("\n请输入要删除的位置:");
scanf("%d",&t);
printf("删除的元素是:%c\n",a);
scanf("%c",&a);
DelList(k,t,a);
printf("删除后的链表是:");
p=k->next;
while(p!=NULL)
{
printf("%c",p->data );
p=p->next;
}
printf("\n链表的长度是:%d\n",ListLength(k));
}
void InitList(LinkList *k)
{
*k=(LinkList)malloc(sizeof(Node));
(*k)->next=NULL;
}
void CreateTail(LinkList L)
{
char c;
Node *r,*s;
int flag=1;
r=L;
while(flag)
{
c=getchar();
if(c!='$')
{
s=(Node*)malloc(sizeof(Node));
s->data =c;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}
}
void Get(LinkList L,int i)
{
int j;
Node *p;
p=L;j=0;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(i==j)
printf("%c",p->data );
else
printf("FALSE");
}
void Locate(LinkList L,ElemType e)
{
Node *p;
p=L->next;
while(p!=NULL)
if(p->data!=e )
p=p->next;
else
break;
if(p->data ==e)
printf("TURE");
else
printf("FALSE");
}
int InsList(LinkList L,int i,ElemType e)
{
Node *pre,*s;
int k;
pre=L;k=0;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(k!=i-1)
{
printf("插入位置不合法!");
return ERROR;
}
s=(Node*)malloc(sizeof(Node));
s->data =e;
s->next=pre->next;
pre->next=s;
return OK;
}
int DelList(LinkList L,int i,ElemType e)
{
Node *p,*r;
int k;
p=L;k=0;
while(p->next!=NULL&&k<i-1)
{
p=p->next;
k=k+1;
}
if(k!=i-1)
{
printf("删除结点的位置不合法!");
return ERROR;
}
r=p->next;
p->next=p->next->next;
e=r->data ;
free(r);
return OK;
}
int ListLength(LinkList L)
{
Node *p;
p=L->next;
int j=0;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}