静态实现


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define MaxSize 10  //定义最大长度
typedef struct {
int data[MaxSize]; //用静态的“数组”存放数据元素
int length; //顺序表的当前长度,且不可变
}SqList; //顺序表的类型定义
//基本操作-初始化顺序表
void InitList(SqList &L);
int main(void) {
SqList L; //声明一个顺序表
InitList(L); //初始化顺序表
return 0;
}

void InitList(SqList &L) {
for (int i = 0; i < MaxSize; i++) {
L.data[i] = 0; //将所有数据元素设置为默认初始值
} //顺序表初始长度为0
L.length = 0;
}

动态实现

#include<stdio.h>
#include<stdlib.h> 
#define InitSize 10  // 默认最大长度
typedef struct{
    int * data;//指示动态分配数组的指针 
    int MaxSize;//顺序表的最大容量 
    int length;//顺序表的当前长度 
}SqList;
void InitList(SqList &L);
void IncreaseSize(SqList &L, int len);
int main(void) {
    SqList L;   //声明一个顺序表
    InitList(L);//初始化顺序表
    for(int i=0;i<L.MaxSize;i++){
        L.data[i]=i;
        printf("%d\n",L.data[i]);
        }
   IncreaseSize(L, 5);  //增加顺序表长度
        for(int i=0;i<L.MaxSize;i++){
        //L.data[i]=i;
        printf("%d",L.data[i]);
        }
    return 0;
}
void InitList(SqList &L) {
    //用malloc函数声明一片连续的存储空间,,实际大小为10*int个字节
    L.data = (int *)malloc(InitSize*sizeof(int));
    L.MaxSize = InitSize;
    L.length = 0;//因为长度设0,所以增加动态数组用的MaxSize
    
}
//增加动态数组的长度
void IncreaseSize(SqList &L, int len) {
    int *p = L.data;
    L.data = (int *)malloc((L.MaxSize + len)*sizeof(int));
    for (int i = 0; i < L.MaxSize; i++) {
        L.data[i] = p[i];
       // printf("%d\n",L.data[i]);
    }
    L.MaxSize = L.MaxSize + len;
    free(p);
}