C++day2

打印 上一主题 下一主题

主题 531|帖子 531|积分 1593

一、思维导图


二、使用C++手动封装一个次序表,包罗成员数组一个

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <csignal>
  5. using namespace std;
  6. using datatype = int;
  7. #define MAX 30
  8. struct Seqlist
  9. {
  10. private:
  11.     // datatype data[MAX] = {0};                //顺序表的数组
  12.     datatype *data;                  //顺序表的数组
  13.     int size = 0;                    //数组的大小
  14.     int len = 0;                     //顺序表实际长度
  15. public:
  16.     //初始化函数
  17.     void init(int n);
  18.     //判空函数
  19.     bool empty();
  20.     //判满函数
  21.     bool full();
  22.     //添加数据函数
  23.     bool add(datatype element);
  24.     //求当前顺序表的实际长度
  25.     int seq_length();
  26.     //任意位置插入函数
  27.     bool insert_pos(int pos, datatype element);
  28.     //任意位置函数函数
  29.     bool delete_pos(int pos);
  30.     //访问容器中任意一个元素 at
  31.     datatype &at(int index);
  32.     //遍历展示顺序表
  33.     bool list_show();
  34.     //二倍扩容
  35.     void expend();
  36.     //销毁
  37.     void destroy();
  38. };
  39. //结构体函数定义
  40. void Seqlist::init(int n)
  41. {
  42.     size = n;                       //当前数组的最大容量
  43.     data = new datatype[size];      //在堆区申请一个顺序表容器
  44. }
  45. bool Seqlist::empty()
  46. {
  47.     return len==0?1:0;
  48. }
  49. bool Seqlist::full()
  50. {
  51.     return len==size?1:0;
  52. }
  53. bool Seqlist::add(datatype element)
  54. {
  55.     //判满
  56.     bool res = full();
  57.     if(res == 1)
  58.     {
  59.         expend();
  60.     }
  61.     data[len] = element;
  62.     len++;
  63.     cout<<"size ="<<size<<endl;
  64.     return 1;
  65. }
  66. int Seqlist::seq_length()
  67. {
  68.     return len;
  69. }
  70. bool Seqlist::insert_pos(int pos, datatype element)
  71. {
  72.     //判满
  73.     bool res = full();
  74.     if(res == 1)
  75.     {
  76.         expend();
  77.     }
  78.     //判断pos合法性
  79.     if(pos<0 || pos>len)
  80.     {
  81.         cout<<"插入位置错误"<<endl;
  82.         return 0;
  83.     }
  84.     //插入位置所有元素后移
  85.     for(int i=len-1;i>len-pos;i--)
  86.     {
  87.         data[i+1] = data[i];
  88.     }
  89.     // 插入新元素
  90.     data[pos] = element;
  91.     // 更新长度
  92.     len++;
  93.     return 1;
  94. }
  95. datatype& Seqlist::at(int index)
  96. {
  97.     //判断位置合法
  98.     if(index<0 || index>=len)
  99.     {
  100.         cout<<"访问位置错误,返回默认位置"<<endl;
  101.         return data[0];
  102.     }
  103.     return data[index];
  104. }
  105. bool Seqlist::list_show()
  106. {
  107.     //判断表空
  108.     if(len == 0)
  109.     {
  110.         cout<<"empty"<<endl;
  111.         return 0;
  112.     }
  113.     for(int i=0;i<len;i++)
  114.     {
  115.         cout<<data[i]<<"\t";
  116.     }
  117.     cout<<endl;
  118.     return 1;
  119. }
  120. void Seqlist::expend()
  121. {
  122.     //申请二倍空间
  123.     datatype* temp =new datatype[size*2];
  124.     //将原顺序表拷贝到新顺序表
  125.     memcpy(temp,data,size* sizeof(datatype));
  126.     delete[] data;                  //销毁原顺序表
  127.     data = temp;                    //data重新指向新顺序表
  128.     size *= 2;
  129. }
  130. void Seqlist::destroy()
  131. {
  132.     delete[] data;
  133.     size = 0;
  134.     len = 0;
  135.     data = NULL;
  136. }
  137. int main()
  138. {
  139.     cout<<"***********顺序表***********"<<endl;
  140.     cout<<"         1、创建顺序表         "<<endl;
  141.     cout<<"         2、初始化顺序表       "<<endl;
  142.     cout<<"         3、任意位置插入       "<<endl;
  143.     cout<<"         4、打印顺序表         "<<endl;
  144.     cout<<"         5、打印任意位置       "<<endl;
  145.     cout<<"         6、销毁顺序表         "<<endl;
  146.     //实例化一个顺序表
  147.     Seqlist list;
  148.     while(1)
  149.     {
  150.         //system("cls");         //清屏
  151.         int menu = 0;
  152.         cout<<"请输入操作选项:";
  153.         cin>>menu;
  154.         switch(menu)
  155.         {
  156.         case 1:
  157.         {
  158.             cout<<"创建顺序表"<<endl;
  159.             int size = 0;
  160.             cout<<"请输入需要创建顺序表的大小"<<endl;
  161.             cin>>size;
  162.             list.init(size);
  163.             cout<<"创建成功"<<endl;
  164.         }
  165.             break;
  166.         case 2:
  167.         {
  168.             cout<<"初始化顺序表"<<endl;
  169.             int n = 0;
  170.             cout<<"请输入您要插入数据个数"<<endl;
  171.             cin>>n;
  172.             datatype element = 0;
  173.             for(int i=0;i<n;i++)
  174.             {
  175.                 cout<<"请输入第"<<i+1<<"个数据"<<endl;
  176.                 cin>>element;
  177.                 list.add(element);
  178.             }
  179.             cout<<"初始化成功"<<endl;
  180.         }
  181.             break;
  182.         case 3:
  183.         {
  184.             cout<<"任意位置插入"<<endl;
  185.             int pos = 0;
  186.             datatype element;
  187.             cout<<"请输入您要插入的位置"<<endl;
  188.             cin>>pos;
  189.             cout<<"请输入您要插入的元素"<<endl;
  190.             cin>>element;
  191.             bool res = list.insert_pos(pos,element);
  192.             if(res == 1)
  193.             {
  194.                  cout<<"任意位置插入成功"<<endl;
  195.             }
  196.         }
  197.             break;
  198.         case 4:
  199.         {
  200.             cout<<"打印顺序表"<<endl;
  201.             //输出
  202.             list.list_show();
  203.         }
  204.             break;
  205.         case 5:
  206.         {
  207.             cout<<"打印任意位置"<<endl;
  208.             int pos = 0;
  209.             cout<<"请输入您要查看的位置:";
  210.             cin>>pos;
  211.             cout<<list.at(pos-1)<<endl;
  212.         }
  213.             break;
  214.         case 6:
  215.         {
  216.             cout<<"销毁顺序表"<<endl;
  217.             list.destroy();
  218.             cout<<"销毁成功"<<endl;
  219.         }
  220.             break;
  221.         default:
  222.             cout<<"选项输入错误"<<endl;
  223.         }
  224.     }
  225.     return 0;
  226. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表