数据结构 顺序表 操作集

此顺序表是以数组下标为1开始放入元素的。。。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <stdlib.h>
using namespace std;
typedef int ElemType;
#define LIST_INIT_SIZE 5 //线性表储存空间的初始分配量
#define LISTINCREMENT 1   //线性表存储空间的分配增量
struct SqList
{
    ElemType *elem;
    int length;
    int listsize;
};
void init(SqList &L) //初始化
{
    L.elem=NULL;
}
bool Is_Exist(SqList &L) //顺序表是否存在
{
    if(L.elem==NULL)
        return false;
    else
        return true;
}
bool Create (SqList &L) //创建一个顺序表
{
   L.elem=(ElemType*)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
   if(L.elem==NULL)
   {
       printf("动态内存分配失败\n");
       return false;
   }
   L.length=0;
   L.listsize=LIST_INIT_SIZE;
   return true;
}
void ClearList(SqList &L) //清空顺序表
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    L.length=0;
}
void DestroyList (SqList &L) //销毁顺序表
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    free(L.elem);
    L.length=0;
}
bool ListEmpty(SqList &L)  //判断顺序表是否为空
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    if(L.length==0)
        return true;
    else
        return false;
}
int ListLength(SqList &L) //顺序表的长度
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    return L.length;
}
bool GetElem (SqList &L,int loc,ElemType &e) //顺序表中某个位置元素的值
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    if(L.length<loc||loc<=0)
    {
        printf("查找超出顺序表范围\n");
        return false;
    }
    e=L.elem[loc];
    return true;
}
void ListTraverse (SqList &L) //顺序表遍历
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    for (int i=1;i<=L.length;i++)
        printf("%d%c",L.elem[i],i==L.length?'\n':' ');
}
bool ListInsert (SqList &L,int loc,ElemType data) //插入元素
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    if(loc>L.length+1||loc<=0)
    {
        printf("插入位置超出顺序表范围\n");
        return false;
    }
    if(L.length+1>=L.listsize)
    {
       ElemType* newbase;
       newbase=(ElemType*)realloc(L.elem,sizeof(ElemType)*(L.listsize+LISTINCREMENT));
       if(newbase==NULL)
       {
           printf("追加内存失败\n");
           exit(OVERFLOW);
       }
       L.elem=newbase;
       L.listsize+=LISTINCREMENT;
    }
    for (int i=L.length+1;i>=loc;i--)
        L.elem[i]=L.elem[i-1];
    L.elem[loc]=data;
    L.length++;
    return true;
}
bool ListDelete(SqList &L,int loc,int &e) //删除指定位置元素
{
    if(!Is_Exist(L))
    {
        printf("顺序表不存在,程序终止\n");
        exit(OVERFLOW);
    }
    if(ListEmpty(L))
    {
        printf("顺序表为空,不可删除元素\n");
        return false;
    }
    if(loc>L.length||loc<=0)
    {
        printf("删除位置超出顺序表范围\n");
        return false;
    }
    e=L.elem[loc];
    for (int i=loc;i<L.length;i++)
         L.elem[i]=L.elem[i+1];
    L.length--;
    return true;
}
int main()
{
    SqList L;
    init(L);
    Create(L);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41410799/article/details/82828105
今日推荐