顺序表等相关概念请自行查阅资料,这里主要是实现。

注:

1.顺序表C语言实现;

2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善;

3.提供几个简单函数,可自行添加功能;

4.可用C++封装,得知STL中vector原理。

顺序表容量。

#define CAPACITY 20 //容量

顺序表结构体。

typedef struct
{
int *m_pHead; //指向数组头
int m_iSize; //大小
int m_iCapacity; //容量
}STABLE;

部分操作,可自行添加其他操作。

STABLE* createTable();
void appendElement(STABLE* pTable, int iElement);
void insertElement(STABLE* pTable, int iElement, int index);
void delElement(STABLE* pTable, int index);
int getAt(STABLE* pTable, int index);
void setAt(STABLE* pTable, int iElement, int index);
void showTable(STABLE* pTable);
void releaseMem(STABLE* pTable);

分配内存,元素个数为0。

STABLE* createTable()
{
STABLE *pTable = (STABLE*)malloc(sizeof(STABLE));
if(!pTable)
{
printf("动态内存分配失败!\n");
return pTable;
} pTable->m_pHead = (int*)malloc(sizeof(int) * CAPACITY);
if(!pTable->m_pHead)
{
printf("动态内存分配失败!\n");
return NULL;
} pTable->m_iSize = ;
pTable->m_iCapacity = CAPACITY; return pTable;
}

追加

void appendElement(STABLE* pTable, int iElement) 
{
    if(!pTable || !pTable->m_pHead)
    {
        printf("顺序表不存在!\n");
        return;
    }     if(pTable->m_iSize == pTable->m_iCapacity)
    {
        printf("顺序表已满!\n"); //可以重新分配内存 这里就不实现了 从简
        return;
    }
    
    pTable->m_pHead[pTable->m_iSize] = iElement;
    pTable->m_iSize++;
}

插入

void insertElement(STABLE* pTable, int iElement, int index)
{
    if(!pTable || !pTable->m_pHead)
    {
        printf("顺序表不存在!\n");
        return;
    }     if(pTable->m_iSize == pTable->m_iCapacity)
    {
        printf("顺序表已满!\n"); //可以重新分配内存 这里就不实现了 从简
        return;
    }     if(index < 0 || index > pTable->m_iSize)
    {
        printf("插入位置不合理!\n");
        return;
    }     //后移
    for(int i = pTable->m_iSize - 1; i >= index; i--)
    {
        pTable->m_pHead[i+1] = pTable->m_pHead[i];
    }
    pTable->m_pHead[index] = iElement;
    pTable->m_iSize++;
}

删除

void delElement(STABLE* pTable, int index)
{
if(!pTable || !pTable->m_pHead)
{
printf("顺序表不存在!\n");
return;
} if(pTable->m_iSize < )
{
printf("顺序表元素个数为0!\n");
return;
} if(index < || index > pTable->m_iSize - )
{
printf("删除元素位置不合理!\n");
return;
} //前移
for(int i = index; i < pTable->m_iSize - ; i++)
{
pTable->m_pHead[i] = pTable->m_pHead[i+];
} pTable->m_iSize--;
}

获取

int getAt(STABLE* pTable, int index)
{
if(!pTable || !pTable->m_pHead)
{
printf("顺序表不存在!\n");
return -;
} if(index < || index > pTable->m_iSize - )
{
printf("索引不合理!\n");
return -;
} return pTable->m_pHead[index];
}

修改

void setAt(STABLE* pTable, int iElement, int index)
{
if(!pTable || !pTable->m_pHead)
{
printf("顺序表不存在!\n");
return;
} if(index < || index > pTable->m_iSize - )
{
printf("索引不合理!\n");
return;
} pTable->m_pHead[index] = iElement;
}

打印所有元素。

void showTable(STABLE* pTable)
{
if(!pTable || !pTable->m_pHead)
{
printf("顺序表不存在!\n");
return;
} printf("容量:%d,大小:%d,打印元素:\n", pTable->m_iCapacity, pTable->m_iSize);
for(int i = ; i < pTable->m_iSize; i++)
printf("%d ", pTable->m_pHead[i]); printf("\n");
}

内存释放。

void releaseMem(STABLE* pTable)
{
if(!pTable)
{
printf("顺序表不存在!\n");
return;
} if(pTable->m_pHead)
free(pTable->m_pHead); free(pTable);
printf("内存释放成功!\n");
}

数据结构与算法之顺序表C语言实现的更多相关文章

  1. C:数据结构与算法之顺序表

    顺序表作为数据结构的开端,说明这里面很多基础要学,初学者一开始都会混淆,今天我们来一步一步来建立一个完整的顺序表,可以任我们控制的顺序表,首先先定义一个顺序表 /* Note:Your choice ...

  2. 数据结构与算法之顺序栈C语言实现

    顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...

  3. python基础下的数据结构与算法之顺序表

    一.什么是顺序表: 线性表的两种基本的实现模型: 1.将表中元素顺序地存放在一大块连续的存储区里,这样实现的表称为顺序表(或连续表).在这种实现中,元素间的顺序关系由它们的存储顺序自然表示. 2.将表 ...

  4. Java数据结构和算法 - 哈希表

    Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...

  5. 数据结构与算法(c++)——跳跃表(skip list)

    今天要介绍一个这样的数据结构: 单向链接 有序保存 支持添加.删除和检索操作 链表的元素查询接近线性时间 ——跳跃表 Skip List 一.普通链表 对于普通链接来说,越靠前的节点检索的时间花费越低 ...

  6. 【数据结构与算法】线性表操作(C++)

    #include <stdio.h> #define maxSize 100 //定义整型常量maxSize值为100 /*顺序表的结构体定义*/ typedef struct SqLis ...

  7. 实现数据结构与算法需要掌握的C语言

    我使用C语言并不频繁,一般都是用来实现数据结构与算法,因为面向过程的编程方式容易理解算法的原理,但是呢,如果很长时间没写算法,那么就意味着C语言的某些语法就生疏了,但是总有那么一些,在写算法的时候,特 ...

  8. 《数据结构》2.2顺序表(sequence list)

    //顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...

  9. 顺序表C语言版

    #include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...

随机推荐

  1. 0x40二分法

    二分模板一共有两个,分别适用于不同情况.算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值. 版本1 在单调递增序列a中查找>=x的数中最小 ...

  2. 【转】DataURL在Web浏览器中的兼容性总结

    IE8+,Firefox,Chrome,Opera,Safari 等现代浏览器普遍支持data URL IE8 data URL 最大长度限制为32k字节,超出无效.IE9+没有这个限制 IE只识别b ...

  3. 2017.9.22 HTML学习总结--JavaScript脚本语言

    接上: 1.JavaScript脚本语言 定义:javascript是一种简单的脚本语言,可以在浏览器中直接运行, 是一种在浏览器端实现网页与客户交互的技术javascript代码可 以直接运行在ht ...

  4. 2017.11.24 算法分析与设计------Gay格雷码

    1. 格雷码问题: 对于给定的正整数n,格雷码为满足如下条件的一个编码序列: (1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串. (2) 序列中无相同的编码. (3) 序列中位置相邻的两 ...

  5. Getting aCC Error :name followed by "::" must be a class or namespace name"

    Getting aCC Error :name followed by "::" must be a class or namespace name" 原始是这样子的: ...

  6. ADO.NET 之断开连接层

    定义: 使用ADO.NET断开连接层,就会使用System.Data命名空间的许多成员(主要是DataTable.DataTable.DataRow.DataColumn.DataView和DataR ...

  7. .net core自定义特性操作

    最近移植之前写的几个类,发现特性操作发生了一些改变. 直接看代码,建立表和字段特性类,添加一个用户表,设置好特性. using System; namespace TestDemo { /// < ...

  8. MBProgressHUD 优雅地去提示

    项目主页: MBProgressHUD 实例下载: 点击下载 快速上手: 当执行需要较长时间的任务时,使用MBProgressHUD最重要的一点是: 保证主线程是空闲的,这样可以使UI实时更新.因此: ...

  9. ES6初识-模块化

    export let A=123; export function test(){ console.log('test'); } export class Hello(){ test(){ conso ...

  10. Vim---配置实用的.vimrc文件

    配置自己电脑的vim,配置一个根据个人习惯使用的.vimrc文件.我的有以下功能等,读者可以根据自己的 个人喜好去配置自己的vim. 1.自动插入文件头 ,新建C.C++源文件时自动插入表头:包括文件 ...