线性表有两种结构一种顺序存储结构一种链式存储结构
一组数据中的每一个个体是一个元素
一个个体前一个元素是这个个体的直接前驱
一个个体前一个元素是这个个体的直接后驱
1顺序表
#include “stdafx.h”
#include <stdio.h>
#include <stdlib.h>
#define ListSize 5//申请空间大小
typedef struct LIST{
int * head;
int length;
int size;
};
//初始化顺序表
LIST initList(){
LIST list;
list.head = (int*)malloc(ListSize*sizeof(int));//构造一个空的顺序表,动态申请存储空间
if (!list.head)
{
printf(“申请失败”);
exit(0);
}
list.length = 0;
list.size = ListSize;
return list;
}
int main(int argc, _TCHAR* argv[]){
initList();
return 0;
}
以上是初始化一个顺序表的c语言代码
以下是顺序表的基础操作
(1)顺序表插入元素
//顺序表元素添加 list 链表 add 添加到的位置 elem要添加的元素
LIST addToList(LIST list, int add, int elem){
if (add > (list.size + 1)|| add < 1)
{
//如果要添加的位置不正确
printf(“添加位置错误”);
return list;
}
//查看是否有多余的空间可以插入
if (list.size == list.length)
{
printf("没有多余的空间");
list.head = (int *)realloc(list.head, (list.size + 1)*sizeof(int));
if (!list.head) {
printf("存储分配失败");
return list;
}
list.size += 1;
}
//插入操作,需要将从插入位置开始的后续元素,逐个后移
for (int i = list.length - 1; i >= add - 1; i--) {
list.head[i + 1] = list.head[i];
}
//后移完成后,直接将所需插入元素,添加到顺序表的相应位置
list.head[add - 1] = elem;
//由于添加了元素,所以长度+1
list.length++;
return list;
}
(2)顺序表查找元素
//查找函数,其中,elem表示要查找的数据元素的值
int selectTable(LIST t,int elem){
for (int i=0; i<t.length; i++) {
if (t.head[i]==elem) {
return i+1;
}
}
return -1;//如果查找失败,返回-1
}
(3)顺序表更改元素
//更改函数,其中,elem为要更改的元素,newElem为新的数据元素
LIST amendTable(LIST t,int elem,int newElem){
int add=selectTable(t, elem);
t.head[add-1]=newElem;//由于返回的是元素在顺序表中的位置,所以-1就是该元素在数组中的下标
return t;
}