本实验的单链表元素的类型为char,完成如下实验要求:
(1)初始化单链表h
(2)采用尾插法依次插入a、b、c、d、e
(3)输出单链表h
(4)输出单链表h的长度
(5)判断单链表h是否为空
(6)输出单链表h的第3个元素
(7)输出元素a的逻辑位置
(8)在第4个元素位置上插入元素f
(9)输出单链表h
(10)删除单链表h的第3个元素
(11)输出单链表h
(12)释放单链表h
代码:
#include"stdio.h"
#include"malloc.h"
typedef struct LNode{
char data;
struct LNode *next;
}LinkList;
void InitList(LinkList *&L)
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
void CreateListR(LinkList *&L,char a[],int n)
{
LinkList *s,*r;
int i;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void DisList(LinkList *L)
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
int ListLength(LinkList *L)
{
int n=0;
LinkList *p=L;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return(n);
}
bool ListEmpty(LinkList *L)
{
return(L->next==NULL);
}
bool GetElem(LinkList *L,int i)
{
int j=0;
LinkList *p=L;
while(j<i&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
printf("%c\n",p->data);
return true;
}
}
int LocateElem(LinkList *L,char e)
{
int i=1;
LinkList *p=L->next;
while(p!=NULL&&p->data!=e)
{
p=p->next;
i++;
}
if(p==NULL)
return 0;
else
return i;
}
bool ListInsert(LinkList *&L,int i,char e)
{
int j=0;
LinkList *p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
bool ListDelete(LinkList *&L,int i,char &e)
{
int j=0;
LinkList *p=L,*q;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p=NULL)
return false;
else
{
q=p->next;
if(q==NULL)
return false;
e=q->data;
p->next=q->next;
free(q);
return true;
}
}
void DestroyList(LinkList *&L)
{
LinkList *pre=L,*p=p->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
void main()
{
LinkList *L;
char e;
InitList(L);
char a[5]={'a','b','c','d','e'};
CreateListR(L,a,5);
DisList(L);
ListLength(L);
ListEmpty(L);
GetElem(L,3);
printf("%d\n",LocateElem(L,'a'));
ListInsert(L,4,'f');
DisList(L);
ListDelete(L,3,e);
DisList(L);
DestroyList(L);
}