定义头文件"SeqList.h"
- 在这里定义顺序表的结构体,包含各类头文件,声明各类接口(函数)
#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
typedef int SLDateType;
typedef struct SeqList
{
SLDateType* a;
size_t size;
size_t capacity;
}SeqList;
void SeqListInit(SeqList* ps);
void SeqListDestory(SeqList* ps);
void SeqListPrint(SeqList* ps);
void SeqListPushBack(SeqList* ps, SLDateType x);
void SeqListPushFront(SeqList* ps, SLDateType x);
void SeqListPopFront(SeqList* ps);
void SeqListPopBack(SeqList* ps);
void SeqListCheckcapacity(SeqList* ps);
int SeqListFind(SeqList* ps, SLDateType x);
void SeqListInsert(SeqList* ps, size_t pos, SLDateType x);
void SeqListErase(SeqList* ps, size_t pos);
接口的实现
#include "SeqList.h"
void SeqListInit(SeqList* ps)
{
assert(ps);
ps->a = (SLDateType*)malloc(4 * sizeof(SLDateType));
if (ps->a == NULL) {
printf("申请空间失败!\n");
return;
}
ps->capacity = 4;
ps->size = 0;
}
void SeqListDestory(SeqList* ps)
{
assert(ps);
free(ps->a);
ps->a = NULL;
}
void SeqListPrint(SeqList* ps)
{
assert(ps);
for (size_t i = 0; i < ps->size; i++) {
printf("%d ",ps->a[i]);
}
printf("\n");
}
void SeqListCheckcapacity(SeqList* ps)
{
assert(ps);
if (ps->size == ps->capacity) {
SLDateType* p = (SLDateType*)realloc(ps->a, ps->capacity * 2 * sizeof(SLDateType));
if (p == NULL) {
printf("申请空间失败!\n");
return;
}
else {
ps->a = p;
ps->capacity *= 2;
}
}
}
void SeqListPushBack(SeqList* ps, SLDateType x)
{
SeqListInsert(ps, ps->size, x);
}
void SeqListPushFront(SeqList* ps, SLDateType x)
{
SeqListInsert(ps, 0, x);
}
void SeqListPopFront(SeqList* ps)
{
SeqListErase(ps, 0);
}
void SeqListPopBack(SeqList* ps)
{
SeqListErase(ps, ps->size - 1);
}
int SeqListFind(SeqList* ps, SLDateType x)
{
assert(ps);
for (size_t i = 0; i < ps->size; i++) {
if (x == ps->a[i]) {
return i;
}
}
return -1;
}
void SeqListInsert(SeqList* ps, size_t pos, SLDateType x)
{
assert(ps);
SeqListCheckcapacity(ps);
size_t end = ps->size;
while (pos < end) {
ps->a[end] = ps->a[end - 1];
end--;
}
ps->a[pos] = x;
ps->size++;
}
void SeqListErase(SeqList* ps, size_t pos)
{
assert(ps);
size_t start = pos;
while (start < ps->size - 1) {
ps->a[start] = ps->a[start + 1];
start++;
}
ps->size--;
}
运行结果展示
