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

来源:互联网 发布:ssh连接阿里云服务器 编辑:程序博客网 时间:2024/05/29 17:22

题目要求:

编写一个程序,实现以下单链表的基本操作(单链表的元素类型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;elsecout<<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;elsecout<<"非空!"<<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');//在第四个位置插入元素fcout<<"在第四个位置插入'f'后:";display(l);deletelist(l,3);//删除表的第三个元素cout<<"删除第三个元素后:";display(l);destroy(l);return 0;

原创粉丝点击