前言
因为成电是大二开始学数据结构与算法,算是计院的主科吧,正好这两天考完试有时间所以就先预习了一下数据结构与算法,跳过了前面的基础部分直接从线性结构开始预习了,begin is线性表。
线性表
定义
线性表是具有相同数据类型的 n (n>= 0)个数据元素的有限序列。其中 n 为 表长,当 n = 0时,该线性表是一个空表。若用 L 命名线性表,则其一般表示如下:
L = ( a1 , a2 , a3 , ... , a(i) , a( i + 1) , ... , a(n) )
分类
线性表一般分为两类
- 顺序表(逻辑相邻,物理也相邻)。一维数组可以看做是特殊的顺序表
- 链表(逻辑相邻,物理不一定相邻)
基本操作
- InitList(&L) : 初始化表。构造一个空的线性表。
- Length( L ) : 求表长。返回线性表 L 的长度,即 L 中数据元素的个数。
- LocateElem( L , e ) : 按值查找操作。在表 L 中 查找具有给定关键字值的元素。
- GetElem( L , i ) : 按位查找操作。获取表 L 中第 i 个位置的元素的值
- ListInsert( &L , i , e ) :插入操作。在表 L 中的第 i 个位置插入指定元素 e
- ListDelete( &L , i , &e) : 删除操作。删除表 L 中第 i 个位置的元素,并用 e 返回删除元素的值。
- PrintList( L ) : 输出操作。按前后顺序输出线性表 L 的所有元素的值。
- Empty( L ) : 判空操作。若 L 为空表,则返回 true ,否则返回 false 。
- DestroyList( &L ) : 销毁操作。销毁线性表,并释放线性表 L 所占用的内存空间。
顺序表的基本操作
#include < stdlib.h >
#include < stdio.h >
#define MAXSIZE 100
typedef enum Status {
success, fail, fatal, range_error
}Status;
typedef int EleType;
typedef struct Sqlist {
EleType* elem;
int length;
}Sqlist, * ListPtr;
Status List_init(ListPtr L)
{
Status status = fatal;
L->elem = (EleType*)malloc((MAXSIZE) * sizeof(EleType));
if (L->elem)
{
L->length = 0;
status = success;
}
return status;
}
Status List_insert(ListPtr L, int pos, EleType elem)
{
Status status = range_error;
int len = L->length, i;
if (len > MAXSIZE)
return fail;
else if (0 <= pos && pos <= len)
{
for (i = len;i >= pos;i--)
{
L->elem[i+1] = L->elem[i];
L->elem[pos] = elem;
L->length++;
status = success;
}
}
return status;
}
Status List_delete(ListPtr L, int pos)
{
Status status = range_error;
int len = L->length, i;
for (i = pos;i < len;i++)
{
L->elem[i] = L->elem[i + 1];
}
status = success;
L->length--;
return status;
}
void List_destory(ListPtr L)
{
if (L->elem)
{
free(L->elem);
L->elem = NULL;
}
L->length = 0;
}
void List_print(ListPtr L)
{
int len = L->length;
for (int i = 0; i < len; i++)
{
printf("%d号元素是%d\n",i, L->elem[i]);
}
}
结语
接着努力吧,马上又要是新学期了:punch:
Comments | NOTHING