概念
啥是线性表?
线性表是具有相同特性的数据元素的一个有限序列
(a1,a2,...,ai-1,ai,ai+1,an)
a1:起始结点(线性起点)
an:终端结点(线性终点)
对于其中一个元素ai,ai-1称作`ai的直接前驱`,ai+1称作`ai的直接后继`
n=0时称为空表(n为元素个数,即表长)
那什么是顺序存储?
顺序表就是把逻辑相邻的数据元素存储在物理也相邻的存储单元中的存储结构
实现
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 //定义顺序表的最大长度
typedef struct SqlList { //顺序表结构体
int* pList; //元素基地址指针
int length; //表长度
}SqlList;
//初始化顺序表
void initList(SqlList& L) {
L.pList = (int*)malloc(MAX_SIZE * sizeof(int));
L.length = 0;
}
//插入元素(在表L中的第num个位置插入一个data)
void insertList(SqlList& L, int num, int data) {
if (num > (L.length + 1) || num <= 0 || L.length >= MAX_SIZE) {
printf("insert error\n");
return;
}
else {
for (int i = L.length - 1; i >= num - 1; i--) {
L.pList[i + 1] = L.pList[i];
}
L.pList[num - 1] = data;
L.length++;
}
}
//删除元素(在L表中删除第num个元素)
void delList(SqlList& L, int num) {
if (num >= 0 && num <= L.length) {
for (int i = num; i < L.length; i++) {
L.pList[i - 1] = L.pList[i];
}
L.length--;
}
else
{
printf("del error\n");
return;
}
}
//更改元素(在L表中的第num个位置的值改为data)
void changeList(SqlList& L, int num, int data) {
if (num <= L.length && num > 0) {
L.pList[num - 1] = data;
}
else
{
printf("change error\n");
return;
}
}
//按值查找(查找L表中第一个出现data的位置)
int findByValueList(SqlList& L, int data) {
for (int i = 0; i < L.length; i++) {
if (L.pList[i] == data) {
return i + 1;
}
}
printf("find error");
return NULL;
}
//打印顺序表
void displayList(SqlList& L) {
for (int i = 0; i < L.length; i++) {
printf("%d ",L.pList[i]);
}
printf("\n");
}
int main() {
SqlList L;
printf("初始化有4个值的顺序表:\n");
initList(L);
insertList(L, 1, 1);
insertList(L, 2, 2);
insertList(L, 3, 3);
insertList(L, 4, 4);
displayList(L);
printf("删除第3个元素为:\n");
delList(L, 3);
displayList(L);
printf("更改第2个元素的值为5:\n");
changeList(L, 2, 5);
displayList(L);
printf("查找值为5第一次出现的位置:\n");
printf("%d\n",findByValueList(L, 5));
printf("当前表长度为:\n%d", L.length);
return 0;
}
6686

被折叠的 条评论
为什么被折叠?



