C++--顺序表与单链表实现

来源:互联网 发布:手机版淘宝的新品上架 编辑:程序博客网 时间:2024/06/11 06:04

大一时候写的东西, 基础东西就不讲解思路了

#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> &copy);    void operator=(const nodelist<T2> &copy);    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;            }    }}}
0 0
原创粉丝点击