zoukankan      html  css  js  c++  java
  • C++实现线性表的顺序存储结构

    将线性表的抽象数据类型定义在顺序表存储结构下用C++的类实现,由于线性表的数据元素类型不确定,所以采用模板机制。

      1 头文件seqlist.h
      2 #pragma once
      3 #include <iostream>
      4 const int MaxSize = 100;
      5 template<class T>// 定义模板类
      6 class SeqList
      7 {
      8 public:
      9 
     10     SeqList() { Length = 0; };            // 无参构造函数,建立一个空的顺序表
     11     SeqList(T a[], int n);                // 有参构造函数,建立一个长度为n的顺序表
     12     ~SeqList() {};                        // 空的析构函数
     13     int leng() { return Length; }        // 求线性表的长度
     14     T get(int i);                        // 按位查找第i个元素
     15     int locate(T x);                    // 按值查找值为x的元素序号
     16     void insert(int i, T x);            // 在第i个位置插入值为x的元素
     17     T Delete(int i);                    // 删除第i个元素
     18     void printlist();                    // 打印线性表
     19 
     20 private:
     21     T data[MaxSize];
     22     int Length;
     23 
     24 };
     25 
     26 #pragma region 成员函数定义
     27 
     28 template<class T>
     29 inline SeqList<T>::SeqList(T a[], int n)
     30 {
     31     if (n > MaxSize)throw"参数非法";
     32     for (int i = 0; i < n; i++)
     33         data[i] = a[i];
     34     Length = n;
     35 }
     36 
     37 template<class T>
     38 T SeqList<T>::get(int i)
     39 {
     40     if (i<1 || i>Length)throw"查找位置非法";
     41     else return data[i - 1];
     42 }
     43 
     44 template<class T>
     45 int SeqList<T>::locate(T x)
     46 {
     47     for (int i = 0; i < Length; i++)
     48     {
     49         if (data[i] == x)
     50             return i + 1;        
     51     }
     52     return 0;
     53 }
     54 
     55 template<class T>
     56 void SeqList<T>::insert(int i, T x)
     57 {
     58     if (Length >= MaxSize)throw "上溢";
     59     if (i<1 || i>Length + 1)throw "插入位置非法";
     60 
     61     for (int j = Length; j >= i; j--)
     62         data[j] = data[j - 1];
     63     data[i-1] = x;
     64     Length++;
     65 }
     66 
     67 template<class T>
     68 T SeqList<T>::Delete(int i)
     69 {
     70     if (Length == 0)throw"下溢";
     71     if (i<1 || i>Length)throw"位置非法";
     72     T x = data[i - 1];
     73     for (int j = i; j < Length; j++)
     74         data[j - 1] = data[j];
     75     Length--;
     76     return x;
     77 }
     78 
     79 template<class T>
     80 void SeqList<T>::printlist()
     81 {
     82     for (int i = 0; i < Length; i++)
     83         cout << data[i] << endl;
     84 
     85 }
     86 主函数
     87 #include "seqlist.h"
     88 using namespace std;
     89 int main()
     90 {
     91     int arry[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     92         // 三种创建类对象的方法
     93     SeqList<int> seqlist;
     94     SeqList<int> seqlist1(arry,10);
     95     SeqList<int>* seqlist2 = new SeqList<int>(arry, 10);
     96     cout << seqlist1.get(5) << endl;
     97     cout << seqlist2->get(5) << endl;
     98     cout << seqlist1.locate(10) <<endl;
     99     cout << seqlist2->locate(10) << endl;
    100     seqlist1.insert(3, 11);
    101     seqlist2->insert(4, 12);
    102     seqlist1.Delete(1);
    103     seqlist2->Delete(1);
    104     seqlist1.printlist();
    105     seqlist2->printlist();
    106 
    107     system("pause");
    108     return 0;
    109 }        
  • 相关阅读:
    [翻译]Linux 内核里的数据结构 —— 基数树
    spring各版本下载地址
    两台机子的repcached Memcache 的安装与实验
    非root用户Memcached repcached安装
    VMVare 桥接上网
    JDBC executeBatch 抛出异常停止
    Ehcache jgroups方式同步缓存出现问题总结
    jquery $提示缺少对象$提示缺少对象
    Struts2标签遍历List<Map<String,String>>
    linux与windows回车换行符的区别
  • 原文地址:https://www.cnblogs.com/smile233/p/8058647.html
Copyright © 2011-2022 走看看