#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(once:4996)
#include
#include
#define LISTINITSIZE 8
typedef struct SeqList
{
int* pData;
int size;//表示数组中存储了多少个数据
int capacity;//数组实际能存数据的空间容量的大小
}SeqList;
void SeqListCheckCapacity(SeqList* ps)
{
//如果没有空间或者空间不足,就扩容
if (ps->size == ps->capacity) {
int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
int* tmp = (int*)realloc(ps->pData, newcapacity * sizeof(int));
if (tmp == NULL) {
printf("realloc fail!\n");
exit(-1);
}
ps->pData = tmp;
ps->capacity = newcapacity;
}
}
void InitList(SeqList* ps)
{
ps->pData = (int*)malloc(LISTINITSIZE * sizeof(int));
if (ps->pData == NULL) printf("malloc fail!");
ps->capacity = LISTINITSIZE;
ps->size = 0;
}
void DestroyList(SeqList* ps)
{
if (ps && ps->pData != NULL) {
free(ps->pData);
ps->pData == NULL;
}
ps->size = 0;
ps->capacity = 0;
}
void ClearList(SeqList* ps)
{
if (ps->capacity != 0)
ps->capacity = 0;
}
bool ListEmpty(SeqList ps)
{
for (int i = 0; i < ps.capacity; i++) {
if (ps.pData[i] != NULL) return false;
}
return true;
}
void ListLength(SeqList* ps)
{
for (int i = 0; i < ps->capacity; i++) {
if (ps->pData[i] != 0) ps->size += 1;
}
printf("线性表长度为:%d", ps->size);
}
int GetElem(SeqList ps, int i, int* elem)
{
if (i < i || i > ps.capacity) exit(-1);
elem = ps.pData[i - 1];
return elem;
}
int LocateElem(SeqList ps, int e)
{
for (int i = 0; i < ps.size; i++) {
if (ps.pData[i] == e) {
return i;
}
}
return 0;
}
int PriorElem(SeqList ps, int cur_e, int* pre_e)
{
if (ps.pData[0] != cur_e) {
for (int i = 1; i < ps.size; i++) {
if (ps.pData[i] == cur_e) {
pre_e = ps.pData[i - 1];
return pre_e;
}
}
}
if (pre_e == NULL) exit(-1);
}
int NextElem(SeqList ps, int cur_e, int* next_e)
{
if (ps.pData[ps.size - 1] != cur_e) {
for (int i = 0; i < ps.size - 1; i++) {
if (ps.pData[i] == cur_e) {
next_e = ps.pData[i + 1];
return next_e;
}
}
}
if (next_e == NULL) exit(-1);
}
void ListTraverse(SeqList ps)
{
for (int i = 0; i < ps.size; i++) {
printf(ps.pData[i]);
}
}
int SetElem(SeqList* ps, int i, int* e)
{
if (i < i || i > ps->size) exit(-1);
int tmp = ps->pData[i - 1];
ps->pData[i - 1] = e;
e = tmp;
return e;
}
void InsertElem(SeqList* ps, int i, int e)
{
if (i<1 || i>ps->size + 1) exit(-1);
SeqListCheckCapacity(&ps);
for (int j = ps->size - 1; j >= i - 1; j++) {
ps->pData[j + 1] = ps->pData[j];
}
ps->pData[i - 1] = e;
ps->size += 1;
}
void DeleteElem(SeqList* ps, int i, int* e)
{
if (i<1 || i>ps->size + 1) exit(-1);
e = ps->pData[i - 1];
for (int j = i; j <= ps->size - 1; j++)
{
ps->pData[j - 1] = ps->pData[j];
}
ps->size -= 1;
}
void testSeqList()
{
SeqList ps;
InitList(&ps);
for (int i = 0; i < 5; i++) ps.pData[i] = 1;
ListLength(&ps);
}
int main()
{
testSeqList();
return 0;
}
正常应该没有问题,出错的时候有没有打印下面这句话? malloc fail!
if (ps->pData == NULL) printf("malloc fail!");