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

数据结构-单链表的基本操作

2017-11-01 14:37 459 查看
题目要求:

编写一个程序,实现以下单链表的基本操作(单链表的元素类型elem type为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<iostream>
using namespace std;
/*
*可用elemtype定义数据类型,方便后期修改
*typedef + 数据类型 + elemtype
*/
typedef struct node
{
char data;//elemtype data;
struct node*next;
}linklist;//定义单链表结点类型

void init(linklist*&l)//初始化单链表
{
l=(linklist*)malloc(sizeof(linklist));
l->next=NULL;
}
void display(linklist*&l)//输出单链表
{
linklist*p=l->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
cout<<endl;
}
int length(linklist*l)//求单链表的长度
{
int n=0;
linklist*p=l;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return n;
}
void destroy(linklist*&l)//释放单链表
{
linklist*pre=l,*p=l->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
void findelem(linklist*l,char e)//查找元素编号
{
int i=0;
linklist*p=l->next;
while(p!=NULL&&p->data!=e)
{
i++;
p=p->next;
}
if(p==NULL)
cout<<"该元素不存在!"<<endl;
else
cout<<e<<"元素位置为:"<<i+1<<endl;
}

void insetsq(linklist*&l,int i,char e)//在指定位置插入元素
{
int j=0;
linklist*p=l,*s;
if(i<0)
cout<<"该位置无法插入!"<<endl;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
cout<<"插入错误!"<<endl;
else
{
//while(e>='a'&&e<='e')
//{
s=(linklist*)malloc(sizeof(linklist));
s->data=e;
s->next=p->next;
p->next=s;
//}

}
}
void deletelist(linklist*&l,int i)//删除第i个元素
{
int j=0;
linklist*p=l,*q;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
cout<<"wrong"<<endl;
else
{
q=p->next;
if(q==NULL)
cout<<"wrong"<<endl;
char e=q->data;
p->next=q->next;
free(q);
cout<<"删除成功!"<<endl;
}
}
void create(linklist*&l,char a[],int n)//创建单链表
{
linklist*s,*r;
l=(linklist*)malloc(sizeof(linklist));
r=l;
for(int i=0;i<n;i++)
{
s=(linklist*)malloc(sizeof(linklist));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void find(linklist*&l,int n)//按编号查找元素
{
int j=0;
linklist*p=l;
if(n<=0)
cout<<"wrong input!"<<endl;
while(j<n&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
cout<<"do not find it!"<<endl;
else
{
char e=p->data;
cout<<e<<endl;
}
}
void empty(linklist*&l)//判断是否为空
{
if(l->next==NULL)
cout<<"空!"<<endl;
else
cout<<"非空!"<<endl;
}
int main()
{
linklist*l;
char a[]={'q','r','n','u','x','w'};
int k=6;

init(l);
create(l,a,k);//创建初始化单链表
cout<<"单链表为:";
display(l);
cout<<endl;

int n;
cout<<"输入想插入元素的位置:"<<endl;
cin>>n;
insetsq(l,n,'e');//依次插入a,b,c,d,e五个元素
insetsq(l,n,'d');
insetsq(l,n,'c');
insetsq(l,n,'b');
insetsq(l,n,'a');
cout<<"插入后:";
display(l);

int i=length(l);//显示表的长度
cout<<"单链表长为:"<<i<<endl;

empty(l);//判断是否为空

cout<<"第三个元素为:";
find(l,3);//输出单链表第三个元素

findelem(l,'a');//输出a的位置

insetsq(l,4,'f');//在第四个位置插入元素f
cout<<"在第四个位置插入'f'后:";
display(l);

deletelist(l,3);//删除表的第三个元素
cout<<"删除第三个元素后:";
display(l);

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