数据结构之线性表
创建一个线性表,及其部分功能的实现
使用数组和结构体创建一个线性表,线性表的功能包括:初始化,查询,插入,删除。这些基本功能。
宏定义和文件引用
#include<iostream>
#include <cstdlib>
#define MAXSIZE 100
using namespace std;
创建一个线性表
//利用结构体创建一个线性表
typedef struct SqList *List;//创建一个结构体指针 指向结构体
struct SqList
{
int Data[MAXSIZE];//建立一个数组
int length;//线性表当前长度
}L;
初始化线性表
List MakeEmpty() {
List list;
list = (List)malloc(sizeof(struct SqList));//初始化为0
list->length = 0;//因为没有元素,所以Last=-1,*这里会报空指针异常
return list;
}
线性表的查找功能,找到当前线性表中是否含有值为x的元素,有返回下标,没有返回-1
int Find(int x, List list) {
int i = 0;
while (i < list->length && list->Data[i] != x) {
i++;
}
if (i > list->length-1) {
return -1;//没有找到
}
else {
return i;//找到位置i,从0开始的,从1开始要+1
}
}
线性表插入功能
//在第i个位置插入
void Insert(int x, int i, List list) {
int j;
if (list->length == MAXSIZE) {
printf("表已经满了");
return;
}
if (i < 1 ||i > list->length + 1) {
printf("插入位置不对");
return;
}
for (j = list->length-1; j >= i - 1; j--) {
list->Data[j + 1] = list->Data[j];
}
list->Data[i - 1] = x;
list->length++;
return;
}
线性表删除功能
void Delete(int i, List list) {
int j;
if (i<1 || i>list->length) {
printf("不存在第i个元素");
return;
}
for (j = i; j <= list->length-1; j++) {
list->Data[j] = list->Data[j + 1];
}
list->length--;
return;
}
主函数测试一下线性表
int main() {
List MakeEmpty();
int Find(int x, List list);
void Insert(int x, int i, List list);
void Delete(int i, List list);
List list;
list = MakeEmpty();
cout << list->length;
int i;
list->length = 10;
for (i = 0; i < 10; i++) {
list->Data[i] = i;
}
return 0;
}