博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言实现常用数据结构:顺序表(第2篇)
阅读量:3942 次
发布时间:2019-05-24

本文共 2328 字,大约阅读时间需要 7 分钟。

顺序表

顺序表使用一组连续的物理内存存储地址按照次序存放线性表的元素。

实现要点:

1.顺序表的长度可变。

2.利用C语言的动态内存分配函数,动态分配内存,增加顺序表长度。

3.顺序表初始分配一定大小的存储空间,当空间不足时,再次申请一定增量的空间。

优缺点:

1.顺序表具备随机存取特性,直接根据内存位置访问数据。

2.顺序表插入和删除操作,需要移动大量元素。

因此:顺序表适用于很少进行插入、删除操作,经常进行大量查询修改操作的场景。

使用示例

功能:输入数据个数和数据,逆序保存到顺序表,并逆序输出显示到屏幕。

运行结果如下:

请输入数据个数:10

请输入10个整数:0 1 2 3 4 5 6 7 8 9

顺序表输出结果:9 8 7 6 5 4 3 2 1 0

顺序表删除5位置元素后输出结果:9 8 7 6 4 3 2 1 0

代码实现

*/#include 
#include
// 定义顺序表// 顺序表初始分配的内存大小 #define LIST_INIT_SIZE 5// 顺序表内存大小增量 #define LIST_INSCREMENT_SIZE 10typedef struct { // 存储数据的内存首地址 int *pdata; // 顺序表长度,保存数据的个数 int length; // 顺序表存储空间大小 int size;}sqlist; // 创建和初始化 sqlist *create_init_sqlist(){ sqlist *list = (sqlist *)malloc(sizeof(sqlist)); if(list == NULL) return NULL; // 分配内存空间 list->pdata = (int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(list->pdata == NULL) { free(list); return NULL; } list->length = 0; list->size = LIST_INIT_SIZE; return list;}// 增加 int insert_sqlist(sqlist *list, int data, int pos) { if(list == NULL || pos < 1 || pos > list->length+1) return -1; // 空间已满,需要增加空间 if(list->length >= list->size) { list->pdata = (int *)realloc(list->pdata, \ (list->size + LIST_INSCREMENT_SIZE)*sizeof(int)); if(list->pdata == NULL) return -1; list->size += LIST_INSCREMENT_SIZE; } // 将pos位置开始的数据后移 int i; for(i=list->length; i>=pos; i--) (list->pdata)[i] = (list->pdata)[i-1]; (list->pdata)[pos-1] = data; ++list->length; return 0;}// 删除 int delete_sqlist(sqlist *list, int *data, int pos){ if(list==NULL || pos < 1 || pos > list->length+1) return -1; // 将pos位置之后的数据前移 *data = (list->pdata)[pos-1]; int i; for(i=pos; i<=list->length-1;i++) (list->pdata)[i-1] = (list->pdata)[i]; --list->length; return 0; }// 查看 void print_sqlist(sqlist *list){ if(list != NULL) { int i; for(i=0; i
length; i++) printf("%d ", (list->pdata)[i]); printf("\n"); } } // 销毁void free_sqlist(sqlist *list){ if(list != NULL) { list->length = 0; list->size = 0; free(list->pdata); free(list); }}int main(void){ sqlist *list = create_init_sqlist(); int n,d; printf("请输入数据个数:"); scanf("%d", &n); printf("请输入%d个整数:", n); int i; for(i=0; i

其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。

转载地址:http://qdjwi.baihongyu.com/

你可能感兴趣的文章
Python字符串操作集锦之字符串编码解码函数
查看>>
Python字符串类型转换函数
查看>>
Python有用的命令
查看>>
Python条件语句
查看>>
Python eval()函数
查看>>
Linux rz和sz命令详解
查看>>
Python 集合set
查看>>
Codeforces Round #400 (Div. 1 + Div. 2, combined)D - The Door Problem(2-sat)
查看>>
IDEA中Struts2文件上传时404错误The origin server did not find a current representation for the target resour
查看>>
Perl/Tk 变量追踪及类线程实现
查看>>
1.嵌入式开发环境搭建--虚拟机安装(unbutu)系统
查看>>
2.嵌入式开发环境搭建--(unbutu)系统
查看>>
Linux USB驱动分析之USB2.0协议分析
查看>>
关于iwpriv :no private ioctls 的问题
查看>>
SQL Server Union等操作时解决不同数据库字符集冲突的问题
查看>>
Linq GroupJoin(二)
查看>>
递归:访问页面的控件或文件夹的下文件
查看>>
DataGridView分頁控件
查看>>
Linq 使用entity framework查询视图返回重复记录的问题(转)
查看>>
项目中得到执行文件版本或其它信息
查看>>