数据结构与算法之顺序表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 ...
随机推荐
- 解方程求PH值,POJ(2006)
题目链接:http://poj.org/problem?id=2006 解题报告: 题意看了半天,没看懂,再加上化学没学好,更加让我头痛. 假设1L溶解了x摩尔的酸:ka=m*x*nx/ori-x; ...
- Python 连接、操作数据库
使用python3+pymysql 一.安装python3 a) 从网上下载安装吧 二.安装pymysql https://pypi.python.org/pypi/PyMySQL h ...
- (python)剑指Offer:数组中重复的数字
问题描述 在长度为n的数组中,所有的元素都是0到n-1的范围内. 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字. 例如,输入长度为7的数组{2,3,1, ...
- aop 和castle 的一些 学习文章
https://www.cnblogs.com/zhaogaojian/p/8360363.html
- python打印对象所有属性
print dict(对象名)
- iphone应用程序生命周期浅析
做iphone开发有必要知道iphone程序的生命周期,说白点就是当点击程序图标启动程序开始到退出程序整个使用运行过程中底下的代码都发生了什么,只有理解生命周期,有利于我们开发人员开发出更棒的应用 接 ...
- 微信小程序日期选择器
/* JS代码部分 */ const date = new Date() const years = [] const months = [] const days = [] const hours ...
- [vijos p1028] 魔族密码
描述 风之子刚走进他的考场,就……花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花)风之子:我呕……(杀死人的眼神)快说题目!否则……-_-###花花:……咦~~好冷~~我们现在要 ...
- 【赛时总结】 ◇赛时·III◇ AtCoder ABC-099
◆赛时·III◆ ABC-099 ■唠叨■ 不要问我为什么先给ABC-100写了博客再写的ABC-099-- 莫名觉得这次比赛特别简单--虽然我并没有参加比赛,只是之后再补做的.QwQ ■试题& ...
- C#进阶学习笔记(个人整理)
学习笔记 第一章: 一.回顾数组 1.变量 : 只能存储一个数据 2.数组 :存储固定大小的相同类型的数据 3.对象 : 存储多个相同/不同类型的数据 4.集合 : 特殊的容器,存储N个相同/不同类型 ...