顺序表的实现
(1) 初始化顺序表
(2) 建立顺序表
(3) 销毁顺序表 //顺序表静态分配内存,在顺序表退出作用域时自动释放该变量所占内存单元,无需销毁
(4) 判空操作
(5) 求顺序表的长度
(6) 遍历操作
(7) 按值查找
(8) 按位查找
(9) 插入操作
(10) 删除操作
所需要实现的十大功能
#include<stdio.h>
#define MaxSize 100
typedef int typeDate; //定义线性表的数据类型,假设为int型
struct SeqList{
typeDate date[MaxSize];
int length;
};
void IniList(SeqList *L) {//初始化顺序表
L -> length = 0;
}
int SetList(SeqList *L, typeDate a[], int n) {//建立顺序表
if(n > MaxSize) {
printf("顺序表空间不足,无法建立\n");
return 0;
}
for(int i = 0; i < n; i++)
L -> date[i] = a[i];
L -> length = n;
return 1;
}
void Empty(SeqList *L) {//判空操作
if (L -> length == 0) printf("顺序表为空\n");
else printf("顺序表不为空\n");
}
int length(SeqList *L) {//求顺序表长度
return L -> length;
}
void PrintList(SeqList *L) {//遍历顺序表
for(int i = 0; i < L -> length; i++)
printf("%d ", L -> date[i]);
printf("\n");
}
int Locate(SeqList *L, typeDate x) {//按值查找
for(int i = 0; i < L -> length; i++)
if(L -> date[i] == x) {
printf("该值位于第%d位\n", i);
return 1;
}
printf("顺序表中没有该值, 查找失败\n");
return 0;
}
int Get(SeqList *L, typeDate n) {//按位查找
if(n < 0 || n > L -> length) {
printf("查找位置非法,查找失败\n");
return 0;
}
return L -> date[n];
}
int Insert(SeqList *L, int j, typeDate x) {// 插入操作
if(L -> length >= MaxSize) {
printf("上溢错误,插入失败\n");
return 0;
}
if(j < 0 || j > L -> length) {
printf("位置错误,插入失败\n");
return 0;
}
for(int i = L -> length; i >= j; i--)
L -> date[i] = L -> date[i-1];
L -> date[j] = x;
L -> length++;
return 1;
}
int Delete(SeqList *L, int j) {
if(L -> length <= 0) {
printf("下溢错误,删除失败\n");
return 0;
}
if(j < 0 || j > L -> length) {
printf("超出顺序表范围, 删除失败\n");
return 0;
}
for(int i = j; i < L -> length; i++)
L -> date[i] = L -> date[i+1];
L -> length--;
return 1;
}
int main() {
int n;
int Test[5] = {1, 2, 3, 4, 5};
SeqList L;
SetList(&L, Test, 5);
Insert(&L, 0, 6);//在第0位插一个6
Insert(&L, 6, 7);//在第6位插一个7
Insert(&L, 3, 10);
Locate(&L, 6);//查找6这个数的位置
printf("该位置的数字是:%d\n", Get(&L, 3));
PrintList(&L);
for(int i = 0; i < 5; i++) {
printf("请输入你想删除的元素下标: ");
scanf("%d", &n);
printf("\n");
Delete(&L, n);
PrintList(&L);
}
}
参考书籍: <<数据结构-从概念到C实现>>