数据结构与算法之顺序表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 ...
随机推荐
- windows/Linux主机重启NetBackup服务和后台进程
关闭并启动所有NetBackup服务和后台进程 要关闭并启动所有NetBackup服务和后台驻留程序,请从命令行输入以下命令: 在Windows上: 要关闭所有NetBackup服务: install ...
- 继承FileInputFormat类来理解 FileInputFormat类
import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.had ...
- WebStrome react-native代码智能提示
1.clone到本地 git clone https://github.com/virtoolswebplayer/ReactNative-LiveTemplate 2,添加ReactNative. ...
- linux环境下nginx配置
1.反向代理配置 # nginx/conf/nginx.conf
- React路由-进阶篇
路由进阶 1.多级路由,和之前的思想一样,在子路由里面继续写Route,继续挂载组件,就可以实现多级路由 比如这样:class Food extends Component{ render() { r ...
- 【Effective C++ 读书笔记】条款03: 尽量使用 const
关键字const多才多艺,变化多端却不高深莫测. const 修饰指针 面对指针, 你可以指出 指针自身.指针所指物.或者两者都不是 const. 如果关键字 const 出现在星号左边,表示被指物是 ...
- Google Compute Engine VM自动调节
现象:利用google云搭建VM服务,在搭建实例组有一个"自动调节"功能,可以自动添加/删除MV,当自动添加VM时可能新添加的VM就是一个新的VM,你部署的代码或者环境都没了.现在 ...
- C语言数组篇(二)指针数组和数组指针
数组指针 和 指针数组 这两个名词可以说是经常搞混了 数组指针--> 数组的指针 就是前面讲的 指向数组a的指针p; 指针数组--&g ...
- 使用python制作神经网络——搭建框架
一.神经网络的大体结构可分为三个函数,分别如下: 1.初始化函数 设定输入层节点,隐藏层节点和输出层节点的数量. 2.训练 学习给定训练集样本后,优化权重. 3.查询 给定输入,从输出节点给出答案 所 ...
- [BZOJ3631][JLOI2014]松鼠的新家(树链剖分)
[BZOJ3631] 树剖模板题了, Code #include <cstdio> #include <algorithm> #define MID int mid=(l+r) ...