数据结构算法之顺序表
//顺序表是数据结构中可以称的上最简单的一种数据结构了,它是一种线性存储结构,可通过下标遍历的方式进行访问,定义了最大大小MAX_SIZE,极其下标的长度length,可以理解为就是一个数组。
#include<stdio.h>
#include<Windows.h>
#define MAX_SIZE 100 //定义的最大数组大小
typedef int Elemdata;
typedef struct _Sqlist {
Elemdata* data;
int size;
int length;
};
//初始化顺序表
bool IsinitList(_Sqlist& L) {
L.data = new Elemdata[MAX_SIZE];
//没初始化成功返回
if (!L.data) return false;
L.length = 0;
return true;
}
//增加元素
bool appendList(_Sqlist &L,Elemdata data) {
if (L.length == MAX_SIZE) {
printf("元素已满,增加元素失败\n");
return false;
}
L.data[L.length] = data;
L.length++;
return true;
}
//插入元素
bool insertList(_Sqlist& L, Elemdata data,int Pos) {
if (L.length == MAX_SIZE) {
printf("元素已满,无法插入\n");
return false;
}
if (Pos >= L.length) {
printf("无效插入位置\n");
return false;
}
//若插入的元素位置为当前元素的下一个位置时
if (Pos == L.length - 1) {
L.data[L.length] = data;
L.length++;
return true;
}
for (int j = L.length - 1; j >=Pos; j--) {
L.data[j + 1] = L.data[j];
}
L.data[Pos] = data;
L.length++;
return true;
}
//删除元素
bool deleteList(_Sqlist &L,int Pos) {
if (Pos>=L.length || Pos < 0) {
printf("删除失败\n");
return false;
}
for (int j = Pos; j < L.length - 1; j++) {
L.data[j] = L.data[j + 1];
}
L.length--;
return true;
}
//销毁顺序表 释放内存
void destoyedList(_Sqlist &L) {
delete [] L.data;
L.length = 0;
L.size = 0;
}
//顺序表遍历
void printList(_Sqlist &L) {
if (L.length == 0) return;
for (int i = 0; i < L.length; i++) {
printf("%d\t", L.data[i]);
}
printf("\n");
}
//测试代码
int main(void) {
_Sqlist L;
if (IsinitList(L)) {
printf("初始化元素成功!\n");
}
for (int i = 0; i < 10; i++) {
appendList(L, i);
}
printf("删除元素前\n");
printList(L);
deleteList(L, 0);
deleteList(L, 8);
printf("删除元素后\n");
printList(L);
insertList(L, 108, 5);
insertList(L, 108, 0);
insertList(L, 108, 9);
insertList(L, 120, 11);
printf("增加元素后\n");
printList(L);
destoyedList(L);
printList(L);
system("pause");
return 0;
}