数据结构
之最简线性表(顺序存储)
/*
时间:2-26
运行环境:dev c++
*/
#include<stdio.h>
#include<stdlib.h>
#define INITAL_SIZE 2
#define add_Size 10 //
typedef int ElemType ;
typedef struct {
ElemType *el ; //基址
int length ; //已有元素数
int list_Size ; //未经扩容时可容纳最大元素数
} Slist;
void initi(Slist *L) ;
void insert(Slist *L ,int i , ElemType e ) ;
void print(Slist *L) ;
int main (void){
Slist L1 ;
//初始化线性表
initi(&L1) ;
// 示例:
insert(&L1,0,1) ;
insert(&L1,0,122) ;
insert(&L1,1,1) ;
insert(&L1,2,2) ;
print(&La) ;
return 0 ;
}
void print(Slist *L) {
int i = 0 ;
int j = L->length ;
while( i< j){
printf("%d \n",L->el[i]) ;
i ++ ;
}
}
void initi(Slist *L) {
//所谓线性表 顺序结构的初始化就是为其分配一定的内存空间
L->el = (ElemType *)malloc(INITAL_SIZE * sizeof(ElemType));
//判断是否分配成功
if(L->el==NULL){
printf("初始化失败\n") ;
return ;
} else {
printf("分配内存成功,请继续!!!!!\n") ;
L->length = 0 ;
L->list_Size = INITAL_SIZE ;
}
}
void insert(Slist *L ,int i , ElemType e ) {
if(L==NULL||i<0||i>L->length) {
printf("所插入的线性表无效,终止执行\n") ;
return ;
}
if(L->length>= L->list_Size){
//开始扩容
// L->el = (ElemType*) malloc((add_Size+L->list_Size) * sizeof(ElemType)) ;
L->el= (ElemType *)realloc(L->el, (L->length + add_Size) * sizeof(ElemType));
if(L->el==NULL) {
printf("扩容失败") ;
return ;
}
L->list_Size = L->list_Size +add_Size ;
printf("扩容一次") ;
}
for (int k = L->length ; k > i; k--) {
L->el[k] = L->el[k-1] ;
}
L->el[i] = e ;
if(i==L->length)
L->length ++ ;
}
接下来的delete(Slist *L,int i),我想初学者也可以
销毁线性表只需要了解free()函数的使用。