c语言 数据结构 顺序表


一、顺序表简介

在计算机中用一组连续地址的内存单元来存储整张线性表。这种存储结构称为顺序存储结构,这种存储结构下的线性表称之为 顺序表。
顺序表的特征:
1 有一个唯一的表名来标识顺序表
2 内存单元连续存储,一张顺序表占一个连续的存储空间
3 数据按顺序存放,数据有前后顺序之区分


二、顺序表定义

1 静态定义一个顺序表:
类似于数组的定义:
int a[10];char b[20];
//定义了一个顺序表a 和一个顺序表b
2 动态定义一个顺序表:
#define SIZE 10
typedef struct{数据类型 *name;int length;int list; } list;

void initList(list *a){
a->name =(int *)malloc(SIZE*sizeof(数据类型));//指向结构体的首地址
if(!a->name) exit(0);
a->length =0;
a->list =SIZE;

}

//动态定义表步骤
1 定义一个list结构体,成员项: 指向首地址的指针变量
2 采用初始化函数,生成动态表


三、顺序表操作(插入与删除)

3.1 顺序表插入
3.1.1静态顺序表的数据插入操作
void insert(int a[SIZE],int length,int i,int info)
{
//参数说明 a[]顺序表 ,length 原顺序表中已存在数据的长度 , i:第i位置开始插入 , info:第i个位置插入info
if(length ==SIZE||i<1||i>length+1)
exit(0);//异常插入
//length==SIZE 检测当前顺序表的长度如果等于最大静态表的长度,如果是 则静态表已经到达最大值,则禁止插入新元素
//小于1 代表从第0位开始插入,插入位置错误
//i>length+1 代表元素不是插入到顺序表原有的数据中,不符合顺序表的定义规则

for(t=n-1;t>=i-1;t–)
a[t+1]=a[t] ;//元素向后移动

a[i-1]=info; //放置元素
length =length +1; //顺序表长度加1
}
3.1.2 动态顺序表数据插入操作
void insert(list *a,int i,int info){
if(i<1 || i>a->length+1 || a->length+1>a->list)
exit(0);

//增加顺序表空间
a->name =(int *)realloc(a->name,(a->list+1)*sizeof(数据类型);

//顺序表元素后移
int *t = &(a->name[i-1]);
int *p = &(a->name[a->length-1]);
for(;p>=t;p–)
*(p+1)=*p;
//放置元素
*t=info;
//顺序表长度加1
a->length=a->length+1;
a->list =a->list+1;
}

3.1.3 静态顺序表删除
//删除静态数据表中的 第i 个元素
void del(int a[SIZE],int length,int i){
if(i<0 ||i>length) exit(0);//非法操作

for(t=i-1;ta->length) exit(0);

a->name =(int *)realloc(a->name,(a->list-1)*sizeof(数据类型));

int *t = &(a->name[i-1]);
for(;tname+a->length;t++)
*(t)=*(t+1);

a->length =a->length-1;
}