数据结构与算法之顺序表C语言实现
顺序表等相关概念请自行查阅资料,这里主要是实现。
注:
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语言实现的更多相关文章
- C:数据结构与算法之顺序表
顺序表作为数据结构的开端,说明这里面很多基础要学,初学者一开始都会混淆,今天我们来一步一步来建立一个完整的顺序表,可以任我们控制的顺序表,首先先定义一个顺序表 /* Note:Your choice ...
- 数据结构与算法之顺序栈C语言实现
顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...
- python基础下的数据结构与算法之顺序表
一.什么是顺序表: 线性表的两种基本的实现模型: 1.将表中元素顺序地存放在一大块连续的存储区里,这样实现的表称为顺序表(或连续表).在这种实现中,元素间的顺序关系由它们的存储顺序自然表示. 2.将表 ...
- Java数据结构和算法 - 哈希表
Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...
- 数据结构与算法(c++)——跳跃表(skip list)
今天要介绍一个这样的数据结构: 单向链接 有序保存 支持添加.删除和检索操作 链表的元素查询接近线性时间 ——跳跃表 Skip List 一.普通链表 对于普通链接来说,越靠前的节点检索的时间花费越低 ...
- 【数据结构与算法】线性表操作(C++)
#include <stdio.h> #define maxSize 100 //定义整型常量maxSize值为100 /*顺序表的结构体定义*/ typedef struct SqLis ...
- 实现数据结构与算法需要掌握的C语言
我使用C语言并不频繁,一般都是用来实现数据结构与算法,因为面向过程的编程方式容易理解算法的原理,但是呢,如果很长时间没写算法,那么就意味着C语言的某些语法就生疏了,但是总有那么一些,在写算法的时候,特 ...
- 《数据结构》2.2顺序表(sequence list)
//顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...
- 顺序表C语言版
#include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...
随机推荐
- vue中的js动画与Velocity.js结合
vue里面除了用css写动画,还可以用js写动画,vue的transition中,定义了几个动画钩子 第一个动画钩子:@before-enter <div id='app'> <tr ...
- HTTP Method 详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)--转
前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...
- Linq to Entity 时间差作为筛选条件产生的问题
前言 在使用 Linq to Entity 的時候,會把之前 Linq to SQL 的想法就帶進去,寫好之後編譯也都不會出錯,但是實際上在跑的時候就會出現錯誤訊息了,這點真的要注意了.這次我遇到問題 ...
- JavaScript 十行原生代码实现复制内容到剪贴板
十行原生代码,不引入任何 JS 库,目前大部分浏览器与移动平台都可兼容. function copyToClipboard(value, callback) { var textarea = docu ...
- SAP 文本框实例
SAP 文本框 简单实例 REPORT ZTEST001. DATA: OK_CODE LIKE SY-UCOMM, SAVE_OK LIKE SY-UCOMM. DATA: REF_EDIT_CTN ...
- 爬虫学习(十六)——jsonpath
jsonpath介绍 jsonpath是一种信息抽取类库,是从json文档中抽取指定信息的工具,提供多种语言实现的版本 jsonpath对json来说,就相当于xpath对于xml jsonpath和 ...
- [Wolfgang Mauerer] 深入linux 内核架构 第一章 概述
作为Linux开发爱好者,从事linux 开发有两年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分 ...
- Java执行存储过程
1.JDBC调用存储过程: CallableStatement /** *p是要调用的存储过程的名字,存储过程的4个参数,用4个?号占位符代替 *其余地方写法固定 */ CallableStateme ...
- H5之audio标签放音兼容所有浏览器方法
前端交流群,群文件提供大量文档.书籍和资料.期待你的加入!群号:127768464 由于项目需要,最近刚做了一个网页放音的功能,使用到了H5新标签<audio></audio> ...
- 多线程(threading module)
一.线程与进程 线程定义:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不 ...