C++ 数据结构与算法(一)线性表之顺序表

Seqlist.h:

const int DefaultSize = 100;

template <class T>
class SeqList
{
public:
    SeqList(int sz = DefaultSize)
        :m_nmaxsize(sz),m_ncurrentsize(-1)
    {//初始化顺序表
        if(sz > 0)
        {
            m_element = new T[m_nmaxsize];
        }
    }
    ~SeqList()
    {
        delete[] m_element;
    }
    int Length() const;////获取顺序表长度
    int Find(T x) const;//找到元素 x 的位置
    int IsElement(T x) const; //顺序表中是否存在元素x
    int Insert(T x,int i);//插入元素x
    int Delete(T x);//删除元素x
    int IsEmpty() const;//判断顺序表是否为空
    int IsFull() const;//判断顺序表是否满
    T GetElement(int i);//获取第i个元素
    void Print();

private:
    T* m_element;
    const int m_nmaxsize;
    int m_ncurrentsize;
};
template<class T>
int SeqList<T>::Length() const
{
    return m_ncurrentsize + 1;
}

template<class T>
int SeqList<T>::Find(T x) const
{
    for(int i = 0 ;i < m_ncurrentsize; i++)
    {
        if(m_element[i] == x)
            return i;
    }
    cout << "没有找到你想要的元素" << endl;
    return -1;
}
template<class T>
int SeqList<T>::IsElement(T x) const
{
    if(Find(x) == -1)
        return 0;
    else
        return 1;
}
template<class T>
int SeqList<T>::Insert(T x, int i)
{
    if(i < 0 || i > m_ncurrentsize + 1 || m_ncurrentsize == m_nmaxsize - 1)
    {
        cout << "非法操作" << endl;
        return 0;
    }
    m_ncurrentsize ++;

    for(int j = m_ncurrentsize; j >i; j --)
    {
        m_element[j] = m_element[j-1];
    }
    m_element[i] = x;
    return 1;
}
template<class T>
int SeqList<T>::Delete(T x)
{
    int nsize = m_ncurrentsize;
    for(int i = 0; i< m_ncurrentsize; i++)
    {
        if(m_element[i] == x)
        {
            for(int j = i; j < m_ncurrentsize; j ++)
            {
                m_element[j] = m_element[j+1];
            }
            m_ncurrentsize --;
            continue;
        }
    }
    if(nsize = m_ncurrentsize)
    {
        cout << "没有找到你想要删除的元素" << endl;
        return 0;
    }
    return 1;
}


template<class T>
int SeqList<T>::IsFull() const
{
    return m_ncurrentsize == m_nmaxsize -1;
}
template<class T>
T SeqList<T>::GetElement(int i)
{
    if(i < 0 || i > m_nmaxsize)
    {
        cout << "非法操作" << endl;
        return 0;
    }
    return m_element[i];
}
template<class T>
void SeqList<T>::Print()
{
    for(int i = 0 ;i <= m_ncurrentsize;i ++)
    {
        cout << i + 1 << ":\t" << m_element[i] << endl;
    }
    
}

test.cpp

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "Seqlist.h"
#include<iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    SeqList<int> list;
    
    int a[15] = {4,8,8,2,9,1,7,6,4,3,2,9,11,7,9};
    for(int i = 0; i< 15 ;i ++)
    {
        list.Insert(a[i],i);
    }
    list.Print();
    cin.get();
    return 0;
}

 

 

posted @ 2013-03-24 11:32  Jamy Cai  阅读(1185)  评论(0编辑  收藏  举报