《数据结构与算法》 顺序表

/************************************************
      线性表的顺序存储结构-------顺序表
*************************************************/

/*
顺序表结构:
元素类型:ElemType
每个元素的的存储空间大小:sizeof(ElemType)
整个线性表的存储空间大小:n*sizeof(ElemType),n为线性表中元素个数
C和C++中,使用数组存放线性表中的元素和逻辑关系
数组大小:MaxSize
*/

#ifndef LINEARLIST_H
#define LINEARLIST_H

#define MaxSize 100

typedef int ElemType;

typedef struct
{
	ElemType Data[MaxSize];
	int length;
}SqList;

/*
根据数组a中的元素创建顺序表L,数据表长度为n
注意n的值不能超过定义顺序表里的MaxSize的大小
*/
void CreatList(SqList* &L,ElemType a[],int n);   

/*
初始化一个空的顺序表L
*/
void InitList(SqList* &L);

/*
释放顺序表L
*/
void DestoryList(SqList* &L);

/*
判断顺序表L是否为空
*/
bool ListEmpty(SqList* &L);

/*
获取顺序表L长度
*/
int ListLength(SqList* &L);

/*
显示顺序表中所有元素内容
*/
void DisplayList(SqList* &L);

/*
获取顺序表L中第i个元素的内容(从0开始)
*/
ElemType GetElem(SqList* &L,int i);

/*
获取顺序表L中元素的内容内e的位置
*/
int LocateElem(SqList* &L,ElemType e);

/*
在顺序表L中i位置插入的内容e(i从0开始)
*/
bool ListInsert(SqList* &L,int i,ElemType e);

/*
删除顺序表L中i位置的内容(i从0开始)
*/
bool ListDelete(SqList* &L,int i);

#endif
#ifndef LINEARLIST_CPP
#define LINEARLIST_CPP

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

using namespace std;


void CreatList(SqList* &L,ElemType a[],int n)
{
	int i,k=0;
	L = (SqList *)malloc(sizeof(SqList));
	for(i=0;i<n;i++)
	{
		L->Data[i]=a[i];
		k++;
	}
	L->length = k;
}


void InitList(SqList* &L)
{
	L = (SqList *)malloc(sizeof(SqList));
	L->length=0;
}



void DestoryList(SqList* &L)
{
	free(L);
}


bool ListEmpty(SqList* &L)
{
	return	L->length ==0; 	
}


int ListLength(SqList* &L)
{
	cout<<"ListLength:"<<L->length<<endl;
	return L->length;
}

void DisplayList(SqList* &L)
{
	for(int i=0;i<L->length;i++)
	{
		cout<<"L->Data[i]:"<<L->Data[i]<<endl;
	}
}


ElemType GetElem(SqList* &L,int i)
{
	if(i>=0&&i<=L->length-1)
	{
	cout<<"GetElem:"<<L->Data[i]<<endl;
	return L->Data[i];
	}	
}



int LocateElem(SqList* &L,ElemType e)
{
	int i = 0;
	while(i<L->length&&e!=L->Data[i])
		i++;
	if(i>=L->length)
		return 0;
	else
	cout<<"LocateElem:"<<i<<endl;
		return i;
}



bool ListInsert(SqList* &L,int i,ElemType e)
{
	if(i<0||i>L->length)	
		return false;
	if(L->length == MaxSize)
		return false;
	for(int j=L->length;j>i;j--)
	{
		L->Data[j]=L->Data[j-1];
	}
	L->Data[i]=e;
	L->length++;
	return true;
}



bool ListDelete(SqList* &L,int i)
{
	if(i<0||i>L->length)
		return false;
	for(int j=i;j<L->length;j++)
	{
		L->Data[j]=L->Data[j+1];
	}
	L->length--;
	return true;
}


int main() 
{
	int a[10] = {11,22,33,44,55,66,77,88,99,101};
	SqList* L;
	CreatList(L,a,10);
	DisplayList(L);
	int length = ListLength(L);
	GetElem(L,0);
	LocateElem(L,55);
	bool ret = ListInsert(L,0,1000);
	DisplayList(L);
	bool ret2 = ListDelete(L,1);
	DisplayList(L);
	DestoryList(L);
	return 0;
}

#endif


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值