zoukankan      html  css  js  c++  java
  • 数据结构线性表

    

    #ifndef SEQLIST_H
    #define SEQLIST_H
    #include<iostream>
    using namespace std;
    const int Maxsize = 100;
    template<typename T>
    class SeqList
    {
    public:
     SeqList();//构造空链表
     SeqList(T a[], int n); //构造长度为n的链表
     ~SeqList();
     int Length(){ return length; };//求线性表的长度
     T Get(int i);//按位查找
     int Locate(T x);
     void Insert(int i, T x);//插入操作中,在第i个元素插入x
     T Delete(int i);//删除第i个元素
     void PrintList();//输出线性表
    private:
     T data[Maxsize];
     int length;
    };
    template<typename T>
    SeqList<T>::SeqList()//构造空链表
    {
     length = 0;
    }
    template<typename T>
    SeqList<T>::SeqList(T a[], int n) //构造长度为n的链表
    {
     int i;
     if (n > Maxsize)throw"参数非法";
     for (i = 0; i < n; i++)
      data[i] = a[i];
     length = n;
    }
    template<typename T>
    SeqList<T>::~SeqList()
    {
     //delete[]data;
    }
    template<typename T>
    T SeqList<T>::Get(int i)//按位查找
    {
     if (i<1 && i>length)throw"查找位置非法";
     else
      return data[i - 1];
    }
    template<typename T>
    int SeqList<T>::Locate(T x)
    {
     int i;
     for (i = 0; i < length;i++)
     if (data[i] == x)return i + 1;
     return 0;
    }
    template<typename T>
    void SeqList<T>::Insert(int i, T x)//插入操作中,在第i个元素插入x
    {
     int j;
     if (length >= Maxsize)throw"上溢";
     if (i<1 || i>length + 1)throw"位置";
     for (j = length; j >= i; j--)
      data[j] = data[j - 1];
     data[i - 1] = x;
     length++;
    }
    template<typename T>
    T SeqList<T>::Delete(int i)//删除第i个元素
    {
     int j;
     if (length == 0)throw"下溢";
     if (i<1 || i>length)throw"位置";
     T x = data[i-1];
     for (j = i; j < length; j++)
      data[j - 1] = data[j];
     length--;
     return x;
    }
    template<typename T>
    void SeqList<T>::PrintList()//输出线性表
    {
     int i;
     for (i = 0; i < length; i++)
      cout <<" "<<data[i];
     cout << endl;
    }
    #endif

    ****************************************************************************************************************

    #include"SeqList.h"
    #include<iostream>
    using namespace std;
    void main()
    {
     int a[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };
     int m, n;
     SeqList<int> zxh(a,10);
     cout << "构造的函数数组:";
     zxh.PrintList();
     cout << "请输入您要插入的数字及其位置:";
     cin >> m >> n;
      zxh.Insert(n,m);
     cout << "更改后函数数组:";
     zxh.PrintList();
     cout << "请输入您想删除的元素的位置:";
     cin >> m;
     zxh.Delete(m);
     cout << "更改后函数数组:";
     zxh.PrintList();
     cout << "请输入您想查找的元素的位置:";
     cin >> m;
     cout << "您查询的元素:";
     cout << zxh.Get(m) << endl;;
     cout << "请输入您要查询的元素:";
     cin >> m;
     cout << "您要查询的元素的位置:";
     cout << zxh.Locate(m) << endl;;
    }

    上面代码是线性表的主要能实现的功能,这个代码是学数据结构的基础代码。他主要调动了学者对线性表的认识,在刚开是编写的时候,我没有那个数组的构造函数,只有一个初始化的构造函数。在调用插入函数的时候我就一直没有办法实现元素的插入,因为在初始话的时候length变成了0,这就无法在线性表中进行插入。因为我是学完整张才回来便携的。我以为他和栈中的出栈入栈是一个原理。结果显示是我想错了。在线性表中length=0是初始化但是我们还是要在给他开辟一个长度供他实现基本操作的。最后一个问题就是在析构函数中我也是犯了同样的错误,在线性表中的析构函数是不需要任何东西的。


  • 相关阅读:
    Python文件相关的操作
    Python运算符
    字符串方法
    Python列表的增删改查和元祖
    压测
    jmeter相关使用
    charles的使用
    接口测试
    编程珠玑之关键字(1)--《c语言深度剖析》整理(转)
    循环单链表操作(转)
  • 原文地址:https://www.cnblogs.com/zhangxinhua/p/8319268.html
Copyright © 2011-2022 走看看