数据结构之动态顺序表(C实现)
线性表有2种,分为顺序表和链表。
顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定)
链表: 有3种,单链表、双向链表、循环链表(长度不固定) seqList.h
#ifndef SEQLIST_H #define SEQLIST_H #include <stdio.h> #include <malloc.h> typedef enum { OK=, //正确 ERROR=, //出错 TRUE=, //为真 FALSE= //为假 }status; typedef int ElemType; //宏定义队列的数据类型 #define initSize 20 //线性表存储空间的初始大小 //顺序表的结构 typedef struct { //静态顺序表:使用动态分配的指针方式 ElemType *data; //顺序表的数据元素指针,指向存放数据元素存储空间的基地址 int length; //顺序表的长度 int maxSize; //顺序表的最大容量 }seqList; //创建顺序表 pSeqList-顺序表对象指针 elemSize-线性表的初始存储容量 status initList(seqList *pSeqList,int elemSize); //销毁顺序表 void destroyList(seqList *pSeqList); //清空顺序表: 将长度清零即可 status clearList(seqList *pSeqList); //判断顺序表是否为空 status isEmpityList(seqList *pSeqList); //在第i个位置上插入新元素,即在当前线性表的第i-1和第i个元素之间插入 //将原先的第i个元素以及后面所有元素都后移一个位置 status enList(seqList *pSeqList, int i, ElemType element); //删除元素,即将位置为i的元素删除,从i+1开始及以后的元素后移 status deList(seqList *pSeqList,int i,ElemType *element); //遍历队列 void listTraverse(seqList *pSeqList); #endif // SEQLIST_H
seqList.c
#include "seqlist.h" /********************************************* * 线性表有2种,分为顺序表和链表。 * 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定) * 链表: 有3种,单链表、双向链表、循环链表(长度不固定) *********************************************/ //创建顺序表 pSeqList-顺序表对象指针 elemSize-线性表的初始存储容量 status initList(seqList *pSeqList,int elemSize) { //给顺序表的 pSeqList->data = (ElemType *)malloc(sizeof(ElemType)*elemSize); if(!pSeqList->data) { printf("pSeqList->data malloc error!\n"); return ERROR; } pSeqList->length = ; //最开始,顺序表的元素个数为0,即长度为0 pSeqList->maxSize = elemSize; return OK; } //销毁顺序表 void destroyList(seqList *pSeqList) { free(pSeqList->data); pSeqList->data = NULL; } //清空顺序表: 将长度清零即可 status clearList(seqList *pSeqList) { if(!pSeqList->data) //检验顺序表的数据元素指针是否为空 { pSeqList->length = ; //将长度清零 } return OK; } //判断顺序表是否为空 status isEmpityList(seqList *pSeqList) { ) return TRUE; return FALSE; } //在第i个位置上插入新元素,即在当前线性表的第i-1和第i个元素之间插入 //将原先的第i个元素以及后面所有元素都后移一个位置 (i=0,即删除第一个元素) status enList(seqList *pSeqList,int i,ElemType element) { int len = pSeqList->length; //获得线性表的长度 //i的范围限制为0-len+1(原先长度为len,现在为len+1) || i>len+) { printf("i is false!\n"); return ERROR; } //将原先的第i个元素以及后面所有元素都后移一个位置 ;j>=i;j--) { pSeqList->data[j+] = pSeqList->data[j]; } pSeqList->data[i] = element; //在i的位置上,下标为i-1,插入新元素element pSeqList->length++; //线性表的长度+1 return OK; } //删除元素,即将位置为i的元素删除,从i+1开始及以后的元素后移 status deList(seqList *pSeqList,int i,ElemType *element) { int len = pSeqList->length; //获得线性表的长度 //i的范围限制为0-len+1(原先长度为len,现在为len+1) || i>len+) { printf("i is false!\n"); return ERROR; } *element = pSeqList->data[i]; //将被删元素之后的元素逐个前移 ;j<len;j++) { pSeqList->data[j-] = pSeqList->data[j]; } pSeqList->length--; //线性表的长度-1 return OK; } //遍历队列 void listTraverse(seqList *pSeqList) { //如果队列为空 if(isEmpityList(pSeqList)==TRUE) { printf("\nqueue is NULL!\n"); } printf("listTraverse: "); ;i<pSeqList->length;i++) { printf("%d ", pSeqList->data[i]); } printf("\n"); }
main.c
/********************************************* * C实现顺序表 2017/10/26 by nieXianFeng *********************************************/ #include <stdio.h> #include "seqlist.h" int main() { int value; //用于保存删除的元素 seqList *pSeqList = (seqList*)malloc(sizeof(seqList)); if(!pSeqList) //检测是否申请失败 { printf("pSeqList malloc error!\n"); ; } //调用初始化队列的函数 initList(pSeqList,initSize); //调用出队函数 enList(pSeqList,,); enList(pSeqList,,); enList(pSeqList,,); //调用遍历队列的函数 listTraverse(pSeqList); //调用出队函数 ,&value)==OK) { printf("出队一次,元素为:%d\n", value); } //调用遍历队列的函数 listTraverse(pSeqList); ; }
数据结构之动态顺序表(C实现)的更多相关文章
- 数据结构C语言版--动态顺序表的基本功能实现(二)
/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...
- 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表
一.基本概念: 线性表:由n个类型相同的数据元素组成的有限序列,记为(a1,a2,--an). 线性表的特征:其中的元素存在这序偶关系,元素之间存在着严格的次序关系. 顺序存储表:线性表中的元素依次存 ...
- 【数据结构】之顺序表(C语言描述)
顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...
- C++实现动态顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的存 ...
- C++数据结构学习之顺序表
顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...
- 动态顺序表(C++实现)
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的 ...
- 数据结构之线性顺序表ArrayList(Java实现)
一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 五种编程语言解释数据结构与算法——顺序表1(理论与C语言实现)
1.线性表的分类 2.线性表的定义及其基本操作 2.1.定义:线性表是具有相同类型的n(n>=0)个元素的有序序列,其中n为表长,当n=0时,该表为空表. 2.3.线性表的逻辑结构为: 2.4. ...
随机推荐
- fread了解一下
神奇读入挂^_^ 记得加头文件#include const int BufferSize=100*1000; char buffer[BufferSize],*head,*tail; bool not ...
- vim fulerformat的设置
在vim中设置选项,有注释很容易明白: set laststatus=1 "2总显示最后一个窗口的状态行,1窗口多于一个时显示最后一个窗口的状态行,0不显示最后一个窗口的状态行 fulerf ...
- 解决webview.getFavicon()返回值总是为空的问题
在webview中,我们需要获取网站的favicon.ico图标,但是默认状态下,WebChromeClient中的onReceivedIcon方法获取到的icon总是为null; webview.g ...
- Codeforces 631B Print Check【模拟】
题意: 按顺序给定列和行进行涂色,输出最终得到的方格颜色分布. 分析: 记录下涂的次序,如果某个元素的横和列都被涂过,那么就选择次序最大的颜色. 代码: #include<iostream> ...
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...
- Rust 1.7.0 macro宏的复用 #[macro_use]的使用方法
Rust 1.7.0 中的宏使用范围包含三种情况: 第一种情况是宏定义在当前文件里.这个文件可能是 crate 默认的 module,也可能是随意的 module 模块. 另外一种情况是宏定义在当前 ...
- Centos7 samba 匿名共享 简单config
安装Samba yum install samba samba-client samba-common -y 备份原始的Samba配置文件: mv /etc/samba/smb.conf /etc/s ...
- C# 如何修改Form不能修改窗体大小
把窗体的FormBorderSytle改一下就可以了,改成FixedSingle或者Fixed3D都可以
- easyui报错“Cannot read poperty 'options' of undefined”问题解决方案之一
别逼逼了,我要看解决方法 问题产生原因 最近在项目中使用jquery easyui做页面.其中有个优化问题,我是将原本由jsp通过jstl标签生成的页面改成js通过dom去延迟生成了. 但是js生成的 ...
- Python的lambda函数与排序
Python的lambda函数与排序 2010-03-02 15:02 2809人阅读 评论(0) 收藏 举报 lambdapythonlistlispclass工作 目录(?)[+] 前几天 ...