/***

*SeqList.c

*Copyright (c) 2015, XZG. All rights reserved.

*Purpose:

* 线性表顺序存储结构的创建、数据插入、数据获取、获取长度、删除数据、清空数据、销毁顺序存储结构方法的实现

***/

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

typedef struct _SeqList

{

unsigned int* node;

int length;

int capacity;

}TSeqList;

typedef void SeqList;

typedef void SeqListNode;

//线性表顺序存储结构的创建

SeqList* SeqList_Create(int capacity)

{

//为结构体分配内存

/*第一种内存分配方式

TSeqList* list = (TSeqList *)malloc(sizeof(TSeqList));

为结构体中的数组分配内存

list->node = (unsigned int *)malloc(sizeof(unsigned int)*capacity);

*/

/*第二种内存分配方式

TSeqList* list = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(unsigned int)*capacity);

list->node = (unsigned int*)list++;

*/

TSeqList* ret = NULL;

if (capacity <= 0)

{

return NULL;

}

ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(unsigned int)*capacity);;

if (ret == NULL)

{

return NULL;

}

ret->node = (unsigned int*)(ret + 1);

if (ret->node == NULL)

{

return NULL;

}

//对其初始化

ret->capacity = capacity;

ret->length = 0;

memset(ret->node, 0, sizeof(unsigned int)*capacity);

return ret;

}

//在线性表顺序存储结构的指定位置插入数据

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos)

{

TSeqList *tList = NULL;

//判断指针是否为空

if (list == NULL)

{

return -1;

}

tList = (TSeqList*)(list);

if (node == NULL)

{

return -1;

}

//判断是否满了

if (tList->length >= tList->capacity)

{

return -2;

}

//判断位置是否越界

if (pos < 0 || pos >= tList->capacity)

{

return -2;

}

if (pos >= tList->length)

{

pos = tList->length;

}

//插入算法

for (int i = tList->length; i > pos; i--)

{

//将第pos个元素到最后一个元素向后移动一格

tList->node[i] = tList->node[i - 1];

}

tList->node[pos] = (unsigned int)node;

tList->length++;

return 0;

}

//删除线性表顺序存储结构指定位置的数据

SeqListNode* SeqList_Delete(SeqList* list, int pos)

{

TSeqList *tList = NULL;

SeqListNode* ret = NULL;

//判断指针是否为空

if (list == NULL)

{

return NULL;

}

tList = (TSeqList*)(list);

//判断位置是否越界

if (pos < 0 || pos >= tList->length)

{

return NULL;

}

ret = (SeqListNode*)tList->node[pos];

for (int i = pos; i < tList->length; i++)

{

//将第pos个元素到最后一个元素向后移动一格

tList->node[i] = tList->node[i + 1];

}

tList->length--;

return ret;

}

//获取线性表顺序存储结构指定位置的数据

SeqListNode* SeqList_Get(SeqList* list, int pos)

{

TSeqList *tList = NULL;

SeqListNode* ret = NULL;

//判断指针是否为空

if (list == NULL)

{

return NULL;

}

tList = (TSeqList*)(list);

//判断位置是否越界

if (pos < 0 || pos >= tList->length)

{

return NULL;

}

ret = (SeqListNode*)tList->node[pos];

return ret;

}

//初始化线性表顺序存储结构

void SeqList_Clear(SeqList* list)

{

TSeqList *tList = NULL;

//判断指针是否为空

if (list == NULL)

{

return;

}

tList = (TSeqList*)(list);

tList->length = 0;

memset(tList->node, 0, sizeof(unsigned int)*tList->capacity);

return;

}

//获取线性表顺序存储结构的长度

int SeqList_Length(SeqList* list)

{

TSeqList *tList = NULL;

//判断指针是否为空

if (list == NULL)

{

return 0;

}

tList = (TSeqList*)(list);

return tList->length;

}

//获取线性表顺序存储结构的容量

int SeqList_Capacity(SeqList* list)

{

TSeqList *tList = NULL;

//判断指针是否为空

if (list == NULL)

{

return 0;

}

tList = (TSeqList*)(list);

return tList->capacity;

}

//销毁线性表顺序存储结构

int SeqList_Destory(SeqList* list)

{

//判断指针是否为空

if (list == NULL)

{

return 0;

}

free(list);

list = NULL;

return 0;

} 下面为我写的测试用例:

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "SeqList.h"

typedef struct _Teacher

{

char name[30];

int age;

}Teacher;

void main()

{

SeqList * s = NULL;

Teacher t1, t2, t3;

t1.age = 11;

t2.age = 22;

t3.age = 33;

s = SeqList_Create(10);//线性表数据创建

SeqList_Insert(s, (SeqListNode*)&t1, 0);//线性表数据插入

SeqList_Insert(s, (SeqListNode*)&t2, 0);

SeqList_Insert(s, (SeqListNode*)&t3, 0);

int i = 0, len = 0;

len = SeqList_Length(s);//获取线性表长度

for ( i = 0; i < len; i++)

{

Teacher * tmp = (Teacher*)SeqList_Get(s, i);//获取线性表中指定的数据

printf("%d ",tmp->age);

}

printf("\n");

for ( i = 0; i < len; i++)

{

Teacher * tmp = (Teacher*)SeqList_Delete(s, 0);//删除线性表中数据

printf("%d _", tmp->age);

}

SeqList_Destory(s);

system("pause");

}

python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...相关推荐

  1. python顺序表的实现_数据结构:队列 链表,顺序表和循环顺序表实现(python版)...

    链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...

  2. java实现线性表的案例_数据结构—线性表(LinearList)的原理以及Java实现案例

    线性表:零个或多个数据元素的有限序列.包括数组.链表.栈空间.队列等结构都属于线性表. 本文将介绍Java线性表中的数组.链表的实现逻辑,并附有数组线性表.单链表.静态链表的Java实现源码. 数据结 ...

  3. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)

    原文托管在Github: https://github.com/shellhub/blog/issues/52 数据结构与算法之线性表-顺序表实现(C语言版本) 前言 数据结构与算法是一个程序员必备的 ...

  4. 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构|图的邻接表与深度、广度优先搜索

    线性存储元素时,元素的关系也同时确定了.而非线性数据结构就不同了,需要同时考虑存储数据元素和数据元素的关系. 由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位 ...

  5. 数据结构顺序表的查找_数据结构1|顺序表+链表

    数据结构学习笔记1 进度:静态分配顺序表+单链表 参考资料:b站 王道考研+小甲鱼 < 判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高项目.的阶数. 推导大O阶方法 ...

  6. python论坛系统源码_十个基于Python的BBS论坛类开源web框架汇总(附源码地址

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  7. ajax form表单提交_开发日志:金数据表单自动提交脚本

    最近学校要求我们每天通过一个在线表单打卡自己在家做的体育课项目,在提交的时候我突然想了下如果能有一个自动的系统每天帮我自动打卡岂不是能省很多时间?而且我一直很想学Python的网络爬虫以及服务器后端的 ...

  8. mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念

    mysql中,会涉及到各种表空间的概念,虽然,很多方面这些概念和Oracle有相似性,但也有很多不同的地方,初学者很容易被这些概念弄的晕头转向,从而,混淆这些概念的区别和理解,下面,就简要介绍和说明一 ...

  9. mysql 变量作表名查询_使用MySQL函数变量作为表名查询

    我需要有一个表中增加一定的ID(如AUTO_INCREMENT)函数使用MySQL函数变量作为表名查询 我有水木清华这样 DELIMITER $$ DROP FUNCTION IF EXISTS `G ...

最新文章

  1. CentOS7下vsftp配置
  2. python零基础入门大数据_【资源分享】零基础入门大数据(数据分析)经验分享...
  3. 什么是HTTP Headers?
  4. MarkdownPad2基础语法
  5. 常考数据结构与算法:两个链表的第一个公共结点
  6. Python 爬取揭秘,你的考研调剂对手就有谁?
  7. 基于JavaWEB的学生考勤管理系统
  8. Visio有用的画图技巧
  9. ce修改器我的世界服务器,ce修改器怎么修改金钱?ce修改器无限金钱图文教程
  10. 厉害了,我的谷歌小弟
  11. 2020python考试题库_大学mooc2020用Python玩转数据期末考试公众号答案
  12. 程序员的奋斗史(十二)——谈信念
  13. poi excel下载
  14. python对于0x01的处理
  15. h5与安卓交互 唤起手机照相、相册、摄影 视频播放 图片上传 录音 拨打电话
  16. 氢化溶血卵磷脂行业研究分析
  17. javaweb简化的医院管理系统
  18. 重庆已建成4.2万余个5G基站;山西省累计建成5G基站1.2万个
  19. C语言计算机二级/C语言期末考试 刷题(二)
  20. 吴以岭委员:中药企业创新风险大 必须迎难而上

热门文章

  1. hadoop(9)--MapReduce入门WordCount
  2. Linux 软件安装与卸载之获取程序包的途径
  3. Websocket总结
  4. Android数据存储之SQLite的操作
  5. 如何编写服务器文档记录
  6. webpack入门+react环境配置
  7. 使用AsyncTask实现图片加载
  8. fiddler不能监听 localhost和 127.0.0.1的问题 .
  9. Node.js技术手册
  10. 【Android】OpenGL ES for Android 教程1 - HelloWorld