赞
踩
顺序表是一种基本的数据结构,它在程序设计和算法实现中扮演着重要的角色。顺序表的概念源于数学中的向量或数组,是一种线性表数据结构,其元素按照线性顺序排列,并通过一组连续的存储单元来存储数据。本文介绍了顺序表的分类以及对动态顺序表的实现,希望大家能够有所收获。
目录
线性表是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串... 所以顺序表是线性表的一种。
线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
使⽤定⻓数组存储元素
静态顺序表缺陷:空间给少了不够⽤,给多了造成空间浪费
- typedef int SLDateType;
- typedef struct SeqList
- {
- SLDateType* arr;
- int size;
- int capacity;
- }SL;
- void SLinit(SL* ps)
- {
- ps->arr = NULL;
- ps->size = 0;
- ps->capacity = 0;
- }
- void SLcheck(SL* ps)
- {
-
-
- //如果内容存满了
- if (ps->size == ps->capacity)
- {
- //如果空间为0
- if (ps->capacity == 0)
- {
- ps->capacity = 4;
- }
- //realloc申请空间给tmp
- SLDateType* tmp = (SLDateType*)realloc(ps->arr, ps->capacity * sizeof(SLDateType));
- //申请失败
- if (tmp == NULL)
- {
- perror("realloc fail!");
- exit(1);
- }
- //申请成功 tmp指向arr
- ps->arr = tmp;
- }
-
- }
- void SLprint(SL* ps)
- {
- for (int i = 0; i < ps->size; i++)
- {
- printf("%d ", ps->arr[i]);
- }
- printf("\n");
- }
- void SLpushfront(SL* ps, SLDateType x)
- {
- //检查空间是否足够
- SLcheck(ps);
- //从后向前把每一位往后挪一位
- for (int i = ps->size; i > 0; i--)
- {
- ps->arr[i] = ps->arr[i-1];
- }
- //插入x
- ps->arr[0] = x;
- ps->size++;
- }
- void SLpopfront(SL* ps)
- {
- for (int i = 0; i<ps->size; i++)
- {
- ps->arr[i] = ps->arr[i + 1];
- }
- ps->arr[ps->size - 1] = 0;
- ps->size--;
- }
- void SLpushback(SL* ps, SLDateType x)
- {
- //检查空间是否足够
- SLcheck(ps);
- //直接在最后插入
- ps->arr[ps->size] = x;
- ps->size++;
- }
- void SLpopbake(SL* ps)
- {
- ps->arr[ps->size-1] = 0;
- ps->size--;
- }
- void SLinsert(SL* ps, int pos, SLDateType x)
- {
- //检查空间是否足够
- SLcheck(ps);
- //从后向前 把每一位向后挪一位 直到指定位置停下
- for (int i = ps->size; i>pos; i--)
- {
- ps->arr[i] = ps->arr[i - 1];
- }
- ps->arr[pos] = x;
- ps->size++;
- }
- void SLerase(SL* ps, int pos)
- {
- for (int i = pos; i<ps->size; i++)
- {
- ps->arr[i] = ps->arr[i + 1];
- }
- ps->arr[ps->size] = 0;
- ps->size--;
- }
- void SLdestory(SL* ps)
- {
- if (ps->arr != NULL)
- {
- free(ps->arr);
- }
- ps->arr = NULL;
- ps->size = ps->capacity = 0;
- }
顺序表作为一种基本的数据结构,在C语言编程中具有重要的地位。它简单、高效,适用于许多场景,但同时也存在一些局限性。了解顺序表的原理和特点,能够帮助我们更好地设计程序和实现算法。在实际应用中,我们需要根据具体需求,合理选择和使用顺序表,以发挥其最大的优势。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。