考研数据结构第二章线性表顺序代码实现

270 阅读1分钟

考研数据结构第二章线性表顺序代码实现

1.初始化链表

//1.初始化链表
#define InitSize 50
#define OVERFLOW 0
#define OK 1
int InitSqList(SqList &L){
	L.data = (ElemType *)malloc(sizeof(ElemType)*InitSize);
	if(!L.data)
		exit(OVERFLOW);
	L.MaxSize = InitSize;
	L.length = 0;
	return OK;
}

2.插入操作

// 2,插入操作
#define ERROR 0
int ListInsert(SqList &L,int i,ElemType e){
	if(i<1||i>L.length+1)
		return ERROR;
	if(L.length>L.MaxSize)
		return ERROR;
	for(int j=L.length;j>=i;j--)
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;
	L.length++;
	return OK;	
}

3.删除操作

//3.删除操作

int ListDelete(SqList &L,int i,ElemType &e){
	if(i<1||i>L.length)
		return ERROR;
	e = L.data[i-1];
	for(int j=i;j<L.length;j++)
		L.data[j-1]=L.data[j];
	L.length--;
	return OK;
}

4.获取元素

//4.获取元素 

int GetElem(SqList &L,int i,ElemType &e){
	if(i<1||i>L.length-1)
		return ERROR;
	e = L.data[i-1];
	return OK; 
}

5.按值查找

//5.按值查找 

int LocateElem(SqList L,ElemType e){
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+i;
	return 0;
}

6.销毁释放顺序表

//6.销毁释放顺序表
int DestroyList(SqList &L){
	if(L.data)
		free(L.data);
	L.length = 0;
	L.MaxSize = 0;
	return 0;
} 

7.清空顺序表

//7.清空顺序表
int ClearList(SqList &L){
	L.length=0;
	return OK;
} 

8.获取顺序表长度

//8.获取顺序表长度
int GetLength(SqList L){
	return L.length;
}

9.判断顺序表是否为空

//9.判断顺序表是否为空
int Empty(SqList L){
	if(L.length==0)
		return 1;
	else
		return 0;
} 

10.输出操作

//10.输出操作
void PrintList(Sqlist L){
	int i;
	for(i=0;i<L.length;i++){
		printf("%d",L.data[i]);
	}
}  

线性表顺序代码实现完整代码

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType;
//结构体 
typedef struct{
	ElemType *data;
	int length,MaxSize;
}SqList;

//1.初始化链表
#define InitSize 50
#define OVERFLOW 0
#define OK 1
int InitSqList(SqList &L){
	L.data = (ElemType *)malloc(sizeof(ElemType)*InitSize);
	if(!L.data)
		exit(OVERFLOW);
	L.MaxSize = InitSize;
	L.length = 0;
	return OK;
}

// 2,插入操作
#define ERROR 0
int ListInsert(SqList &L,int i,ElemType e){
	if(i<1||i>L.length+1)
		return ERROR;
	if(L.length>L.MaxSize)
		return ERROR;
	for(int j=L.length;j>=i;j--)
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;
	L.length++;
	return OK;	
}

//3.删除操作

int ListDelete(SqList &L,int i,ElemType &e){
	if(i<1||i>L.length)
		return ERROR;
	e = L.data[i-1];
	for(int j=i;j<L.length;j++)
		L.data[j-1]=L.data[j];
	L.length--;
	return OK;
}

//4.获取元素 

int GetElem(SqList &L,int i,ElemType &e){
	if(i<1||i>L.length-1)
		return ERROR;
	e = L.data[i-1];
	return OK; 
}

//5.按值查找 

int LocateElem(SqList L,ElemType e){
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+i;
	return 0;
}

//6.销毁释放顺序表
int DestroyList(SqList &L){
	if(L.data)
		free(L.data);
	L.length = 0;
	L.MaxSize = 0;
	return 0;
} 

//7.清空顺序表
int ClearList(SqList &L){
	L.length=0;
	return OK;
} 
//8.获取顺序表长度
int GetLength(SqList L){
	return L.length;
}
//9.判断顺序表是否为空
int Empty(SqList L){
	if(L.length==0)
		return 1;
	else
		return 0;
} 
//10.输出操作
void PrintList(Sqlist L){
	int i;
	for(i=0;i<L.length;i++){
		printf("%d",L.data[i]);
	}
}  
int main(){
	return 0;
}