1.C++顺序表

SeqList:

#ifndef SEQLIST_H_
#define SEQLIST_H_

const int Size = 100;

template<typename Type>
class SeqList
{
private:
    Type *m_elements;
    const int m_maxsize;
    int m_currentsize;
public:
    SeqList(int sz=Size):m_maxsize(sz),m_currentsize(-1)
    {
        if(sz>0)
            m_elements = new Type[m_maxsize];
    }
    ~SeqList() {delete[] m_elements;}
    int Length() const {return m_currentsize+1;}     //get the length
    int Find(Type x) const;                          //find the position of x 
    int IsElement(Type x) const;                     //is x in the list
    int Insert(Type x,int i);                        //insert x
    int Remove(Type x);                              //delete x
    int IsEmpty() {return m_currentsize==-1;}
    int Isfull() {return m_currentsize == m_maxsize-1;}
    Type get(int i) 
    {
        return i<0 || i>m_maxsize?(cout<<"can't find the element"<<endl,0):m_element[i];
    }
    void Print();
};

template<typename Type> int SeqList<Type>::Find(Type x) const
{
    for(int i=0;i<m_currentsize;i++)
    {
        if(m_elements[i] == x)
            return i;
    }
    cout<<"can't find the element you want to find!"<<endl;
    return -1;
}

template<typename Type> int SeqList<Type>::IsElement(Type x) const
{
    if(Find(x)==-1)
        return 0;
    return 1;
}

template<typename Type> int SeqList<Type>::Insert(Type x,int i)
{
    if(i<0 || i>m_currentsize+1 || m_currentsize == m_maxsize -1)
    {
        cout<<"the operate is illegal!"<<endl;
        return 0;
    }
    m_currentsize++;
    for(int j=m_currentsize;j>i;j--)
        m_elements[j] = m_elements[j-1];
    m_elements[i] = x;
    return 1;
}

template<typename Type> int SeqList<Type>::Remove(Type x)
{
    int count = m_currentsize;
    for(int i=0;i<m_currentsize;)
    {
        if(m_elements[i]==x)
        {
            for(int j=i;j<m_currentsize;j++)
                m_elements[j] = m_elements[j+1];
            m_currentsize--;
            continue;
        }
        i++;
    }
    if(count == m_currentsize)
    {
        cout<<"can't find the element you want to remove!"<<endl;
        return 0;
    }
    return 1;
}

template<typename Type> void SeqList<Type>::Print()
{
    for(int i=0;i<m_currentsize+1;i++)
        cout<<i+1<<":\t"<<m_elements[i]<<endl;
    cout<<endl;
}

#endif

Test:

#include<iostream>
#include"Seqlist.h"

using namespace std;

int main()
{
    SeqList<int> test(15);
    int array[15] = {2,5,8,1,9,9,7,6,4,3,2,9,7,7,9};
    for(int i=0;i<15;i++)
        test.Insert(array[i],0);
    test.Print();
    test.Insert(1,0);
    cout<<(test.Find(0)?"can't be found ":"Be found ")<< 0 << endl<<endl;
    test.Remove(7);
    test.Print();
    test.Remove(9);
    test.Print();
    test.Remove(0);
    test.Print();

    return 0;
}

 C风格:

#include<iostream>
using namespace std;
typedef int elemType;//元素类型
#define MAXSIZE 20
struct SeqList
{
    elemType data[MAXSIZE];
    int length;
};

bool InitList(SeqList *L)//初始化线性表
{
    for(int i=0;i<MAXSIZE;i++)
        L->data[i] = 0;
    L->length = 0;
    return true;
}

bool IsEmpty(SeqList *L)//判断是否为空
{
    if(L->data==0)
        return true;
    else
        return false;
}

bool ClearList(SeqList *L)//清空
{
    for(int i=0;i<MAXSIZE;i++)
        L->data[i] = 0;
    L->length = 0;
    return true;
}

//用pd返回L中第pos个数据元素,注意pos指位置,第一个位置从0开始
bool GetElem(SeqList *L,int pos,elemType *pd)
{
    if(L->length==0 || pos<1 || pos>L->length)
        return false;
    *pd = L->data[pos-1];
    return true;
}

//返回L中第一个与x满足关系的数据元素,若不存在返回0
int Locate(SeqList *L,elemType x)
{
    for(int i=0;i<L->length;i++)
    {
        if(L->data[i]==x)
            return i+1;
    }
    return 0;
}

//在L中的第pos个位置之前插入新的数据元素y,长度加1
bool InsertList(SeqList *L, int pos, elemType y)
{
    if(L->length ==MAXSIZE)
        return false;
    if(pos<1 || pos>L->length+1)
        return false;
    if(pos <= L->length)
    {
        for(int i=L->length-1;i>=pos-1;i--)
       {
        L->data[i+1] = L->data[i];
       }
    }
    L->data[pos-1] = y;
    L->length++;
    return true;
}

//删除L的第pos个数据元素,并用pe返回其值,L的长度减1
bool DeleteList(SeqList *L,int pos,elemType *pe)
{
    if(pos<1 || pos>L->length)
        return false;
    *pe = L->data[pos-1];
    for(int i=pos;i<L->length;i++)
        L->data[i-1] = L->data[i];
    L->length--;
    return true;
}

int LengthList(SeqList *L)//返回长度
{
    return L->length;
}

//将所有在线性表pb中但不在pa中的元素都插入pa中
void UnionList(SeqList *pa,SeqList*pb)
{
    int lena = pa->length;
    int lenb = pb->length;
    int item;
    for(int i=0;i<lenb;i++)
    {
        if(GetElem(pb,i+1,&item))
        {
            if(Locate(pa,item)==0)
                InsertList(pa,++lena,item);
        }
    }
}

int main()
{
    SeqList Sq;
    InitList(&Sq);
    for(int i=1;i<5;i++)
    {
        InsertList(&Sq ,i,i);
    }
    cout << LengthList(&Sq) <<endl;
    if (!IsEmpty(&Sq))
    {
        cout << "Sq: " << endl;
        for (int i = 0;i<LengthList(&Sq);i++)
            cout << Sq.data[i] << ' ';
    }
    cout << endl;
    
    int pos = Locate(&Sq, 2);
    if (pos != 0)
    {
        int result;
        DeleteList(&Sq, pos, &result);
        cout << "delete: " << result << endl;
    }
    
    if (!IsEmpty(&Sq))
    {
        cout << "Sq: " << endl;
        for (int i = 0 ; i < LengthList(&Sq); i++)
            cout << Sq.data[i] << ' ';
    }
    cout << endl;
    
    SeqList Sq2;
    InitList(&Sq2);
    for (int i = 1 ; i < 4; i++)
        InsertList(&Sq2, i, 6);
    InsertList(&Sq2, 4, 7);
    if (!IsEmpty(&Sq2))
    {
        cout << "Sq2: " << endl;
        for (int i = 0 ; i < LengthList(&Sq2); i++)
            cout << Sq2.data[i] << ' ';
    }
    cout << endl;
    
    UnionList(&Sq, &Sq2);
    
    if (!IsEmpty(&Sq))
    {
        cout << "Sq: " << endl;
        for (int i = 0 ; i < LengthList(&Sq); i++)
            cout << Sq.data[i] << ' ';
    }
    cout << endl;


    return 0;
}

 

posted @ 2015-09-25 20:24  jx_yangbo  阅读(180)  评论(0编辑  收藏  举报