(一)数据结构线性表的C++实现

数据结构线性表的C++实现,参考的是严蔚敏老师的数据结构书


#include <iostream>


using namespace std;


#define LIST_INIT_SIZE 100  //线性表初始空间分配值
#define LISTINCREMENT 10    //线性表增量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
//#define OVERFLOW 0


typedef int ElemType;
typedef int Status;


typedef struct  
{
ElemType *elem;//存储空间基址
int length;    //线性表当前长度
int listsize;  //当前分配的存储容量
}SqList;


Status InitList(SqList &L)//初始化线性表
{
//构造一个空的线性表
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem) //存储分配失败
exit(OVERFLOW);
L.length = 0;//空表长度为零
L.listsize = LIST_INIT_SIZE;//初始化存储容量
return OK;
}


void DestroyList(SqList &L)//销毁线性表
{
if (L.elem != NULL)
{
free(L.elem); //释放内存
cout << "删除成功" << endl;
}
else
cout << "线性表不存在" << endl;
}


Status ClearList(SqList &L)//将线性表置为空表
{
if (L.elem == NULL)
{
cout << "线性表不存在" <<endl;
return FALSE;
}
else
{
free(L.elem);
L.length = 0;
}
return TRUE;
}


Status ListEmpty(SqList &L)//若L为空,返回1;反之,返回0
{
if(L.elem == NULL)
return TRUE;
else
return FALSE;
}


Status ListLength(SqList L)//线性表元素个数
{
return L.length;
}


Status GetElem(SqList L,int i,ElemType *e)//得到线性表第i个值,并用e返回
{
if (L.length == 0 || i > L.length || i < 1)
   return ERROR;
else
*e = L.elem[i - 1];
return TRUE;
}


Status ListInsert(SqList &L,int i,ElemType e)//插入新的数据元素
{
ElemType *p,*q;
if(i > L.length + 1  || i < 0 )
return ERROR;
if (L.length >= L.listsize)
{
ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT)*sizeof(ElemType));
if(!newbase)  
return  ERROR;
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i-1]);
for (p = &(L.elem[L.length-1]);p >= q; --p)
{
*(p+1) = *p;
}
*q = e;
++L.length;
return OK;
}


Status ListDelete(SqList &L,int i,ElemType &e)//删除第i个数据元素
{
int *p,*q;
if (i < 0 || i >L.length)
{
return ERROR;
}
p = &L.elem[i];
e = *p;
for (q = p; q <(L.elem + L.length) ;q++)//L.elem指首元素,L.elem + L.length指最后一个元素
{
*q = *(q + 1);
}
--L.length;
return OK;
}


int main()
{
SqList La;
int Init = InitList(La);
int data[3] = {0,2,3};

for (int i = 0;i < 3;i++)
{
ListInsert(La,i+1,data[i]);
cout << La.elem[i] << endl;
}
cout << La.length << endl;

ElemType e;


GetElem(La,2, &e);
cout << e << endl;

ListDelete(La,0,e);
cout << e << endl;


for (int i = 0;i < La.length;i++)
{
cout << La.elem[i] << endl;
}

system("pause");


return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值