顺序的基本操作代码实现(初始化、插入、删除、销毁等等)
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("销毁成功!");
}
调试截图