单链表的基本操作
来源:互联网 发布:手机能注册淘宝账号吗 编辑:程序博客网 时间:2024/06/03 14:36
关于单链表的一些基本操作
#include<iostream>#include<cstdlib>#include<ctime>using namespace std;#define OVERFLOW -2#define ERROR -1#define SUCCESS 0typedef int Elem;typedef struct lnode{ Elem data; struct lnode *next;}Lnode,*Linklist;void ListCreate(Linklist &l){ Linklist lnew,t; t=l=new Lnode; l->next=NULL; int i=20; Elem e; e=rand()%101+1; while(i--){ lnew=new Lnode; lnew->data=e; lnew->next=NULL; l->next=lnew; e=rand()%101+1; l=l->next; } l=t; return;}void deletelist(Linklist &l){ Linklist t; l=l->next; while(l){ t=l; l=l->next; delete t; }}void trverseL(Linklist &l){ Linklist t=l; l=l->next; while(l!=NULL){ cout<<" "<<l->data; l=l->next; } cout<<endl; l=t; return;}void reversalL(Linklist l){ Linklist p,q,t; t=l; l=l->next; p=NULL; while(l){ q=l->next; l->next=p; p=l; l=q; } t->next=p; l=t;}void deletevenL(Linklist &l){ Linklist p,q,t=l; p=l->next; while(p!=NULL){ if(p->data%2==0){ q=p; l->next=p->next; p=p->next; delete q; } else{ p=p->next; l=l->next; } } l=t; return ;}void insertL(Linklist &l,Elem e){ Linklist p,q,t=l; p=l->next; while(p){ if(p->data>=e){ q=new Lnode; q->data=e; q->next=p; l->next=q; l=t; return ; } p=p->next; l=l->next; } q=new Lnode; q->data=e; q->next=NULL; l->next=q; l=t; return;}void mergel(){ Linklist p,q,l,t; p=new Lnode; p->next=NULL; q=new Lnode; q->next=NULL; l=new Lnode; l->next=NULL; for(int i=0;i<20;i++){ // insertL(p,rand()%101+1); insertL(q,rand()%101+1); } cout<<"第一个链表建立输出:"; trverseL(p); cout<<"第二个链表建立输出:"; trverseL(q); t=q; q=q->next; delete t; while(q){ insertL(l,q->data); t=q; q=q->next; delete t; } t=p; p=p->next; delete t; while(p){ insertL(l,p->data); t=p; p=p->next; delete t; } cout<<"合并成非递减链表:"; trverseL(l); reversalL(l); cout<<"合并成非递增链表:"; trverseL(l); deletelist(l); return ;}void seprateL(){ Linklist l,p,q,p1,q1; p=new Lnode; p1=p; p->next=NULL; q=new Lnode; q1=q; q->next=NULL; cout<<"建立一个新的链表: "; ListCreate(l); //create new linklist trverseL(l); l=l->next; while(l){ if(l->data%2==0){ p->next=l; l=l->next; p=p->next; p->next=NULL; } else{ q->next=l; l=l->next; q=q->next; q->next=NULL; } } cout<<"拆分成两个链表: "<<endl; cout<<"拆分的第一链表: "; trverseL(p1); cout<<"拆分的第二链表: "; trverseL(q1); return ;}void TEST(){ int tsnum; cout<<"本次实验进行链表的有关操作:"<<endl; cout<<"输入1测试产生链表并遍历操作"<<endl; cout<<"输入2测试逆转链表并遍历操作"<<endl; cout<<"输入3测试删除偶数并遍历操作"<<endl; cout<<"输入4测试合并链表并遍历操作"<<endl; cout<<"输入5测试拆分链表并遍历操作"<<endl; cout<<"输入其他数字跳出测试循环"<<endl; while(1){ cout<<"请输入:"; cin>>tsnum; cout<<endl; switch(tsnum){ case 1:{ Linklist l; cout<<"建立新的链表,并输出:"; ListCreate(l); trverseL(l); deletelist(l); cout<<endl; }break; case 2:{ Linklist l; cout<<"建立新的链表,并输出:"; ListCreate(l); trverseL(l); cout<<"逆转链表并输出:"; reversalL(l); trverseL(l); deletelist(l); cout<<endl; }break; case 3:{ Linklist l; cout<<"建立新的链表,并输出:"; ListCreate(l); trverseL(l); cout<<"删除偶数结点并输出:"; deletevenL(l); trverseL(l); deletelist(l); cout<<endl; };break; case 4:{ mergel(); cout<<endl; }break; case 5:{ seprateL(); cout<<endl; }break; default :return ;break; } cout<<"继续测试"; } return ;}int main(){ srand(time(0)); TEST(); return 0;}
1 0
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作!
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 结合ListView和SQLite数据库实现商品展示案列
- 解决tensorflow官网无法访问的问题
- live555 源代码简单分析1:主程序
- 插入排序是一种怎么样的体验
- Vue.js 模板使用方法
- 单链表的基本操作
- matlab中的正则表达式
- makefile中=、:=和+=的区别
- Java中的反射
- nlp技能,jieba分词
- C++模板实现希尔排序
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- WordPress 表结构
- 集合框架-List集合-2