@<电子科技大学>数据结构与算法学习笔记
日期:4-11
顺序存储结构编程
// SqList.h
#pragma once
#define bool int
#define LIST_INIT_SIZE 100
#define LIST_INCREAMENT 10
typedef enum Status {
success, fail, fatal, range_error
}Status;
typedef int ElemType;
typedef struct SqList
{
ElemType* elem;
int length;
int list_size;
} SqList, *ptr, *SqListPtr;
Status List_Init( SqListPtr L );
void List_Destory( SqListPtr L );
void List_Clear( SqListPtr L );
bool List_Empty( SqListPtr L );
int List_Size( SqListPtr L );
Status List_Retrival(SqListPtr L, int pos, ElemType* elem);
Status List_Locate(SqListPtr L, ElemType elem, int* pos);
Status List_Insert(SqListPtr L, int pos, ElemType elem);
Status List_delete(SqListPtr L, int pos);
Status List_Prior(SqListPtr L, int pos, ElemType* elem);
Status List_Next(SqListPtr L, int pos, ElemType* elem);
// SqList.cpp
#include<stdio.h>
#include<stdlib.h>
#include"SqList.h"
Status List_Init(SqListPtr L)
{
Status s = fail;
if (L == NULL)
{
L->elem = (ElemType*)malloc((LIST_INIT_SIZE+1) * sizeof(ElemType));
if (L->elem)
{
L->list_size = LIST_INIT_SIZE;
L->length = 0;
s = success;
}
}
return s;
}
void List_Destory(SqListPtr L)
{
if (L);
{
if (L->elem)
{
free(L->elem);
L->elem = NULL;;
L->length = 0;
}
}
}
void List_Clear(SqListPtr L)
{
if (L)
{
L->length = 0;
}
}
bool List_Empty(SqListPtr L)
{
return (L->length == 0);
}
int List_Size(SqListPtr L)
{
return L->length;
}
Status List_Retrival(SqListPtr L, int pos, ElemType* elem)
{
Status s = range_error;
if (L)
{
if (pos >= 1 && pos <= L->length)
{
*elem == L->elem[pos];
s = success;
}
}
return s;
}
Status List_Locate(SqListPtr L, ElemType elem, int* pos)
{
status s = range_error;
int i = 1;
if (L)
{
for (i = 1; i <= L->length; i++)
{
if (L->elem[i] == elem)
{
*pos = i;
s = success;
break;
}
}
}
return s;
}
Status List_Insert(SqListPtr L, int pos, ElemType elem)//插入元素
{
status s = range_error;
int i;
if (L)
{
if (pos >= 1 && pos <= L->length + 1)
{
if (L->length < L->list_size)
{
for (i = L->length; i >= pos; i--)
L->elem[i + 1] = L->elem[i];
L->elem[i] = elem;
L->length++;
s = success;
}
}
}
return s;
}
Status List_delete(SqListPtr L, int pos)
{
status s = range_error;
int i;
if (L)
{
if (pos >= 1 && pos <= L->length)
{
for (i = pos + 1; i <= L->length; ++i)
L->elem[i - 1] = L->elem[i];
L->length--;
s = success;
}
}
return s;
}
Status List_Prior(SqListPtr L, int pos, ElemType* elem)
{
status s = range_error;
if (L)
{
if (pos >= 1 && pos <= L->length)
{
*elem = L->elem[pos - 1];
s = success;
}
}
return s;
}
Status List_Next(SqListPtr L, int pos, ElemType* elem)
{
status s = range_error;
int i;
if (L)
{
if (pos >= 1 && pos < L->length)
{
*elem = L->elem[pos + 1];
s = success;
}
}
return s;
}
// 代码仅供学习使用