顺序表
SqList.h文件
#ifndef SQLIST_H
#define SQLIST_H
typedef unsigned short int ElemType;
typedef struct
{
ElemType* elem;
unsigned int length;
unsigned int MaxSize;
}SqList;
void SqList_Init(SqList* L,unsigned int size);
void SqList_Append(SqList* L, ElemType e);
void SqList_Traverse(SqList L);
void SqList_Insert(SqList* L, unsigned int i, ElemType e);
ElemType SqList_Delete(SqList* L, unsigned int i);
void SqList_Clear(SqList* L);
void SqList_Destroy(SqList* L);
#endif
SqList.c文件
#include "SqList.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
static const unsigned int INCREMENT = 5;
void SqList_Init(SqList* L, unsigned int size)
{
L->length = 0;
L->MaxSize = size;
L->elem = calloc(sizeof(ElemType), L->MaxSize);
}
void SqList_Append(SqList* L, ElemType e)
{
L->elem[L->length] = e;
L->length += 1;
if (L->length == L->MaxSize)
{
L->MaxSize += INCREMENT;
ElemType* temp = realloc(L->elem,sizeof(ElemType) * L->MaxSize);
if (temp != NULL)
{
L->elem = temp;
}
}
}
void SqList_Traverse(SqList L)
{
assert(L.length != 0);
for (unsigned int i = 0; i < L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
}
void SqList_Insert(SqList* L, unsigned int i, ElemType e)
{
assert(L->length != 0);
assert(i >= 0 && i < L->length);
for (unsigned int j = L->length; j > i ; j--)
{
L->elem[j] = L->elem[j - 1];
}
L->elem[i] = e;
L->length += 1;
if (L->length == L->MaxSize)
{
L->MaxSize += INCREMENT;
ElemType* temp = realloc(L->elem, sizeof(ElemType) * L->MaxSize);
if (temp != NULL)
{
L->elem = temp;
}
}
}
ElemType SqList_Delete(SqList* L, unsigned int i)
{
assert(L->length != 0);
assert(i >= 0 && i < L->length);
ElemType e = L->elem[i];
for (unsigned int j = i; j <= L->length; j++)
{
L->elem[j] = L->elem[j + 1];
}
L->length -= 1;
return e;
}
void SqList_Clear(SqList* L)
{
assert(L->length != 0);
for (unsigned int i = 0; i < L->length; i++)
{
L->elem[i] = 0;
}
L->length = 0;
}
void SqList_Destroy(SqList* L)
{
assert(L->elem != NULL);
free(L->elem);
L->elem = NULL;
L->length = 0;
L->MaxSize = 0;
}
void SqList_Test(void)
{
SqList list;
SqList_Init(&list, 4);
SqList_Append(&list, 0);
SqList_Append(&list, 1);
SqList_Append(&list, 2);
SqList_Append(&list, 3);
SqList_Append(&list, 4);
SqList_Traverse(list);
SqList_Insert(&list, 1, 9);
SqList_Traverse(list);
SqList_Delete(&list, 0);
SqList_Traverse(list);
SqList_Append(&list, 6);
list.elem[0] = 100;
printf("%d\n", list.MaxSize);
SqList_Traverse(list);
SqList_Destroy(&list);
printf("%p\n", list.elem);
}
测试:main.c文件
#include <stdio.h>
#include "SqList.h"
int main()
{
SqList_Test(void);
return 0;
}
测试结果
![SqList_Test](https://img-blog.csdnimg.cn/7041020df4534807a4342400c7592ecf.png)