顺序表的基本操作代码实现

顺序的基本操作代码实现(初始化、插入、删除、销毁等等)


1.标头.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
/*
 @author:W.yu
 @Data:2020-04-27
*/

#define INITSIZE 10  //定义顺序表的初始最大长度

typedef struct {
	int* data;  //顺序表的数据元素
	int MaxSize;  //顺序表的最大容量
	int length;  //顺序表的当前长度
}SqList;

//初始化顺序表L
void InitList(SqList& L);  
//给顺序表L增加len个长度容量
void IncreaseList(SqList& L, int len);
//求表长,返回顺序表L的长度
int Length(SqList L);
//安值查找。在表L中查找具有e的元素,返回元素位置
int LocateElem(SqList L, int e);
//按位查找。获取L中第i个位置的元素
void GetElem(SqList L, int i);
//插入操作。在L中的第i个位置插入元素e
bool InsertList(SqList& L, int i, int e);
//删除操作。删除L中的第i个位置的元素,并用e返回删除的元素
bool DeleteList(SqList& L, int i, int& e);
//输出操作。按前后顺序输出L的所有元素值
void PrintList(SqList L);
//销毁操作。销毁L,并释放空间
void DestroyList(SqList& L);

2.源.cpp

#include "标头.h"
/*
 @author:W.yu
 @Data:2020-04-28 17:07
*/

int main() {
	SqList L;
	InitList(L);
	printf("初始化线性表表长为:%d\n", Length(L));
	PrintList(L);

	InsertList(L, 1, 1);
	InsertList(L, 2, 2);
	InsertList(L, 3, 3);
	InsertList(L, 4, 4);
	InsertList(L, 5, 5);
	InsertList(L, 6, 6);
	InsertList(L, 7, 7);
	InsertList(L, 8, 8);
	printf("线性表表长为:%d\n", Length(L));
	PrintList(L);

	int e = -1;
	DeleteList(L, 3, e);
	printf("线性表表长为:%d\n", Length(L));
	PrintList(L);

	DestroyList(L);

	getchar();
	return 0;
}

void InitList(SqList& L) {
	L.data = (int*)malloc(sizeof(int) * INITSIZE);
	L.MaxSize = INITSIZE;
	L.length = 0;
}

void IncreaseList(SqList& L, int len) {
	int* temp = L.data;
	L.data = (int*)malloc(sizeof(int) * (INITSIZE + len));
	for (int i = 0; i < L.length; i++) {
		L.data[i] = temp[i];
	}
	L.MaxSize = L.MaxSize + len;

	free(temp);
}

int Length(SqList L)
{

	return L.length;
}

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

void GetElem(SqList L, int i)
{
	printf("%d 个位置的元素为:%d\n", i, L.data[i - 1]);
}

bool InsertList(SqList& L, int i, int e)
{
	if (i<1 || i>L.length+1)
		return false;
	if (L.length + 1 > L.MaxSize)
		return false;
	for (int j = L.length; j >= i; j--)
		L.data[j] = L.data[j - 1];
	L.data[i - 1] = e;
	L.length++;
	printf("第%d个位置插入元素:%d成功!\n", i, e);
	return true;
}

bool DeleteList(SqList& L, int i, int& e)
{
	if (i<1 || i>L.length)
		return false;
	e = L.data[i - 1];
	for (int j = i; j < L.length; j++)
		L.data[j - 1] = L.data[j];
	L.length--;
	printf("第%d 个位置的元素删除成功:%d\n", i, e);
	return false;
}

void PrintList(SqList L)
{
	printf("顺序表的元素依次为:");
	for (int i = 0; i < L.length; i++)
		printf("%d ,", L.data[i]);
	printf("\n");
}

void DestroyList(SqList& L)
{
	L.length = 0;
	L.MaxSize = INITSIZE;
	free(L.data);
	printf("销毁成功!");		 
}

调试截图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1 + 1=王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值