您的位置:首页 > 理论基础 > 数据结构算法

2016年数据结构:单链表的使用

2016-03-23 13:38 344 查看
#include <iostream>
#include <string>
#include <cstring>
#include <malloc.h>
using namespace std;

typedef struct Lnode
{
char data;
struct Lnode *Next;
} LinkList;
void CreateListF(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 InitList(LinkList * &L)
{
L=(LinkList *)malloc(sizeof(LinkList));
L->Next=NULL;
}
void DestroyList(LinkList * &L)
{
LinkList *pre=L,*p=L->Next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->Next;
}
free(pre);
}
bool ListEmpty(LinkList * L)
{
return(L->Next==NULL);
}
int ListLength(LinkList * L)
{
int n=0;
LinkList *p=L;
while(p->Next!=NULL)
{
n++;
p=p->Next;
}
return n;
}
void DisList(LinkList *L)
{
LinkList *p=L->Next;
while(p!=NULL)
{
cout<<p->data;
p=p->Next;
}
cout<<endl;
}
bool GetElem(LinkList *L,int i,char &e)
{
int j=0;
LinkList *p=L;
while(j<i&&p!=NULL)
{
j++;
p=p->Next;
}
if(p==NULL)
return false;
else
{
e=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;
}
}
int main()
{
LinkList *L;
InitList(L);
char b[5]={'a','b','c','d','e'};
CreateListF(L,b,5);
DisList(L);
cout<<"该单链表的长度为:"<<ListLength(L)<<endl;
if(ListEmpty(L))
{
cout<<"该链表为空"<<endl;
}
else
{
cout<<"该链表不为空"<<endl;
}
char e;
GetElem(L,3,e);
cout<<"链表中第三个元素的值为:"<<e<<endl;
cout<<'a'<<"所在的位置为:"<<LocateElem(L,'a')<<endl;
ListInsert(L,4,'f');
cout<<"插入元素后链表为:";
DisList(L);
ListDelete(L,3,e);
cout<<"删除元素后链表为:";
DisList(L);
DestroyList(L);
return 0;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: