您的位置:首页 > 其它

编写一个程序,实现单链表的各种基本运算

2013-11-14 16:19 686 查看
本实验的单链表元素的类型为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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: