C++--顺序表与单链表实现
2017-05-02 22:25
495 查看
大一时候写的东西, 基础东西就不讲解思路了
#include <iostream> #include <cmath> #include <iomanip> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; int MAXSIZE=100; template<class T> class sqlist{ public: T a[100]; int len; void input(){ int b; cout<<"输入元素个数N"<<endl; cin>>b; len=b; cout<<"输入元素"<<endl; for(int k=0;k<len;k++) { cin>>a[k]; } cout<<endl; } void output( ) { cout<<"现在表中元素有:"; for(int i=0;i<len;i++) { cout<<a[i]<<" "; } cout<<endl; } void insert( T x,int i) //将X插入到第I个位置 { if(len>=MAXSIZE) cout<<"表已满"<<endl; else if((i<1)||(i>len+1)) cout<<"插入位置有误"<<endl; else { cout<<"将"<<x<<"插入到第"<<i<<"个位置"<<endl; for(int j = len;j>=i;j--) { a[j+1]=a[j]; } a[i]=x; len++; } } void deleteX( int i) //删除第I个位置 { if((i<0)||(i>len)) cout<<"输入位置有误"<<endl; else { for(int j = i;j<len-1;j++) { a[j]=a[j+1]; } len--; } } bool empty( ){ if(len==0) return true; else return false; } }; template<class T1> struct node { T1 data; node *next; node(); node(T1,node<T1> *link=NULL); }; template<class T2> class nodelist { protected: int count; node<T2> *set_position(int position)const { node<T2> *q=head; for(int i =0;i<position;i++) q=q->next; return q; } node<T2> *head; public: // ~nodelist(); // nodelist(const nodelist<T2> ©); void operator=(const nodelist<T2> ©); void output() { if(count==0) cout<<"表空"<<endl; else { cout<<"现在表中有:"<<endl; for(int i =0; i<count;i++ ){ cout<<set_position(i)->data<<" "; } cout<<endl; } } void insert(int position,const T2 &x) { if(position<0||position>count) cout<<"位置有误"<<endl; else { node<T2> *new_node,*previous,*following; previous=NULL; if(position>0){ previous = set_position(position-1); following=previous->next; } else following=head; new_node=new node<T2>(x,following); if(position==0) head=new_node; else previous->next=new_node; count++; } } void deletex(int position) { if(position<0||position>count) cout<<"输入位置有误"<<endl; else if(position!=count) { node<T2> *mp; mp=set_position(position); set_position(position-1)->next=set_position(position+1); delete mp; count--; } else if(position==count) { node<T2> *now; now=set_position(position); set_position(position-1)->next=NULL; delete now; count--; } } }; void menu(){ cout<<"输入一个数字选择功能"<<endl; cout<<"1.建表 "; cout<<"2.显示 "; cout<<"3.插入 "; cout<<"4.删除 "; cout<<"9.退出"<<endl; } void menu1() { cout<<"输入0选择顺序存储结构"<<endl; cout<<"输入1选择链接存储结构"<<endl; cout<<"输入9选择退出程序"<<endl; } int main() { int N; bool falg = true; while(falg){ cin>>N; switch(N) { menu1(); case 0: { bool fa1=true; sqlist<int> l; menu(); int n; while(fa1){ cin>>n; switch(n) { case 1: { l.input(); cout<<"继续输入数字选择"<<endl; break; } case 2: { if(l.empty()) cout<<"表空"<<endl; else l.output(); cout<<"继续输入数字选择"<<endl; break; } case 3: { int x,i; cout<<"输入元素X"<<endl; cin>>x; cout<<"输入插入位置i"<<endl; cin>>i; l.insert(i,x); l.output(); cout<<"继续输入数字选择"<<endl; break; } case 4: { int i; cout<<"输入i,删除第i个位置元素"<<endl; cin>>i; l.deleteX(i); l.output(); cout<<"继续输入数字选择"<<endl; break; } case 9: { fa1=false; cout<<"该表操作结束"<<endl; break; } default: { cout<<"输入错误,请重新输入"<<endl; break; } } } break; } case 1: { bool fa2=true; nodelist<int > l1; menu(); int n; while(fa2){ cin>>n; switch(n) { case 1: { int x; cout<<"输入第0个元素X"<<endl; cin>>x; l1.insert(0,x); cout<<"继续输入数字选择"<<endl; break; } case 2: { l1.output(); cout<<"继续输入数字选择"<<endl; break; } case 3: { int x,i; cout<<"输入元素X"<<endl; cin>>x; cout<<"输入插入位置i"<<endl; cin>>i; l1.insert(i,x); l1.output(); cout<<"继续输入数字选择"<<endl; break; } case 4: { int i; cout<<"输入i,删除第i个位置元素"<<endl; cin>>i; l1.deletex(i); l1.output(); cout<<"继续输入数字选择"<<endl; break; } case 9: { fa2=false; cout<<"该表操作结束"<<endl; break; } default: { cout<<"输入错误,请重新输入"<<endl; break; } } } break; } case 9: { falg=false; break; } default: { cout<<"输入数据有错误,非0非1"<<endl; cout<<"请重新输入0或者1"<<endl; break; } } } }
相关文章推荐
- c/c++实现顺序表和单链表
- C++实现顺序表和单链表
- c++实现单链表,双向链表,顺序表的接口(非模板)
- [C++]实现顺序表和单链表
- C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现
- C++实现顺序表->单链表->双向链表
- C++实现顺序表和单链表
- C++实现顺序表和单链表
- c++ 顺序存储和链表存储 栈的实现代码
- C++实现顺序表、单链表、双链表
- 【C++】实现顺序表、单链表和双向链表
- C++实现顺序表及双向链表
- 顺序链表用C++实现
- C++ 单链表基本操作分析与实现 链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结
- c++实现顺序表、单链表和双向链表
- C++简单实现顺序表与单链表
- 双向循环链表的头插、中插、尾插、删除、逆序顺序显示(C++实现)
- C++实现顺序表和单链表
- 链表的顺序表示和实现(C++模板类实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)