rower 发表于 2018-5-13 15:01:46

线性表顺序存储结构的构建

**************************************************************************************************
                                       做了一些优化,可能不是最优;请评论区提出一些更好的想法




***************************************************************************************************
   #include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 20
typedef int ElemType;
typedef int Status;//不用ElemType作为函数的返回类型,原因是ElemType会变,所以重新定义
typedef struct
{
    ElemType data;//线性表的最大容量//不同语言可以动态扩容
    int length;//线性表的当前长度
}sqList;
Status InitList(sqList *L)
{
    L=(sqList *)malloc(sizeof(sqList));
    L->length=0;
}
Status ListEmpty(sqList L)
{
    if(L.length>0)
      return true;
    else
      return false;
}
void DestroyList(sqList *L)
{
    free(L);
    cout<<"线性表被释放";
    cout<<"线性表的当前长度为:"<<L->length<<endl;
}

Status GetElem(sqList L,int i,ElemType*e)
{
    if(L.length==0||i<1||i>L.length)
    {
      return 0;
    }
    else
    {
      *e=L.data;
      return 1;
    }
}
Status LocateElem(sqList L,ElemType e)
{
    for(int i=1;i<=L.length;i++)
    {

      int counts=0;
      if(L.data==e)
      {

            cout<<"元素找到在第"<<i<<"位"<<endl;
            return i;
      }
      else
      {
            counts++;
            if(counts==L.length)
            {
                cout<<"要查找的数据不在该表中"<<endl;
                return 0;

            }

      }



    }
}
Status ListInsert(sqList *L,int i,ElemType e)
{
    if(L->length>=MAXSIZE)
    {
      cout<<"线性表长度超出最大长度"<<endl;
      return 0;
    }
    else if(i<1||i>L->length)
    {
      cout<<"插入位置错误"<<endl;
      return 0;
    }
    else if(i<L->length)
    {
      for(int k=L->length;k>=i;k--)
      {
            L->data=L->data;
      }
      L->data=e;
      L->length++;
    }
    return 1;
}
Status ListDelete(sqList *L,int i,ElemType *e)
{
    if(L->length<=0)
    {
      cout<<"Error:线性表为空"<<endl;
      return 0;
    }
    else if(i<0||i>L->length)
    {
      cout<<"Error:删除位置不在该线性表中"<<endl;
      return 0;
    }
    else if(i>0&&i<=L->length)
    {
      for(int k=i;k<L->length;k++)//最后的元素依然存在,只不过长度-1
      {
            L->data=L->data;
      }
      L->length--;
      return 1;
    }
}
Status ListLenth(sqList L)
{
    return L.length;
}
void PrintfList(sqList L)
{
    for(int i=1;i<=L.length;i++)
    {
      cout<<L.data<<" ";
    }
    cout<<endl;
}
int main()
{
    sqList L;
    InitList(&L);
    ElemType e;
    int i=0;
    cout<<"请输入线性表的长度"<<endl;
    cin>>L.length;
    cout<<"输入顺序的元素:"<<endl;
    for(int i=1;i<=L.length;i++)//从1开始,让人读的程序,因为我们正常的习惯就是从1开始
    {
      cin>>L.data;

    }
    cout<<"请输入要查找的数据:"<<endl;
    cin>>e;
    LocateElem(L,e);
    //********************
    cout<<"请输入要插入的数据e,输入插入的位置i:"<<endl;
    cin>>e>>i;
    ListInsert(&L,i,e);
    cout<<"线性表当前长度为:"<<ListLenth(L)<<endl;
    PrintfList(L);
    //*******************
    cout<<"请输入要删除的位置i:"<<endl;
    cin>>i;
    ListDelete(&L,i,&e);
    PrintfList(L);
    cout<<"线性表当前长度为:"<<ListLenth(L)<<endl;
    //******************
    DestroyList(&L);


}


                                                            


















rower 发表于 2018-5-13 15:02:35

斜体的有些失误
页: [1]
查看完整版本: 线性表顺序存储结构的构建