赞
踩
链表的创建分为“顺序创建(尾插法)”、“逆序创建(头插法)”两种方式。
关于“链表”的分析请参考文章:“链表(详解)- C++(顺序创建链表-尾插法)”(点击查看)。具体的分析均在文章中,在此我们不做过多的解释,你可以先看上述文章之后再返回看此篇文章。
如果你想要进一步了解“顺序创建”线性表,请参考上述文章。
特别注意:
“逆序创建”时,输出顺序 与 输入顺序是相反的哦。
例如:
输入: a b c d e f g
输出的时候为:g f e d c b a
因为“逆序创建” 是:先插入的数据在最末端,后插入的数据在前端。
说明:采用C++语言,编译环境为DevC++。
- //导入头文件
- #include<malloc.h>
- #include<iostream>
- using namespace std;
-
- //定义链表
- typedef struct Lnode{
- char data;//数据域 (可以根据需要修改 数据域 数据类型)
- struct Lnode *next;//指针域
- }Lnode,*Linklist;
-
- //逆序创建链表
- void Createlist(Linklist &L){
- Linklist p;
- L=(Lnode *)malloc(sizeof(Lnode));//分配空间
- L->next=NULL;
- p=(Lnode *)malloc(sizeof(Lnode));
- cout<<"请输入数据字符,以“#”结束:"<<endl;
- cin>>p->data;
- while(p->data !='#'){
- p->next=L->next;
- L->next=p;
- p=(Lnode *)malloc(sizeof(Lnode));
- cin>>p->data;
- }
- }
-
- //输出
- void Printlist(Linklist L){
- cout<<"\n表中的数据为:\n";
- Linklist p;
- p=L->next;
- while(p != NULL){
- cout<<p->data<<' ';//输出对应结点中的数据
- p=p->next;
- }
- cout<<endl;//换行
- }
-
- //插入
- void Insertlist(Linklist &L,int i,char e){
- Linklist p;
- Linklist s;
- int k=1;
- p=L->next;
-
- while(p && k<i-1){
- p=p->next;
- k++;
- }
-
- s=(Lnode *)malloc(sizeof(Lnode));
- s->data=e;
- s->next=p->next;
- p->next=s;
- }
-
- //删除
- void Deletelist(Linklist &L,int i){
- Linklist p;
- Linklist s;
- char e;
- int k=1;
- p=L->next;
- while(p && k<i-1){
- p=p->next;
- k++;
- }
- s=p->next;
- p->next=s->next;
- e=s->data;
- cout<<"被删除的数据元素为:"<<e<<endl;
- }
-
-
- //主函数
- int main(){
- Linklist L;
- int i;
- char e;
- int d;
- Createlist(L);
- Printlist(L);
- cout<<"第几个位置前插入元素";
- cin>>i;
- cout<<"插入的新 字符 为"<<endl;
- cin>>e;
- Insertlist(L,i,e);//调用插入函数
- cout<<"插入新字符后的表格数据如下"<<endl;
- Printlist(L);//输出线性表中的数据
- cout<<"输入删除第几个元素";
- cin>>d;
- Deletelist(L,d);//调用插入函数
- cout<<"删除元素后表格数据如下"<<endl;
- Printlist(L);//输出线性表中的数据
- }
写在最后:
读两遍下来,如果仍然有不清楚的地方,可在评论区留言。
如果你有其他感到困惑的问题,欢迎留言。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。