顺序表的定义及基本操作

一、数据结构:顺序表的定义,创建,基本运算,实现
二、全部代码

  1. 定义顺序表
#include<stdio.h>
#include<malloc.h>
#define max 100 //顺序表最大可能达到的长度
typedef int Elem;
typedef struct SqList{ //定义顺序表 Elem data[max];//存储空间的基地址 int length; //当前长度
}Sql; //顺序表的结构类型为SqList
  1. 初始化顺序表
//初始化顺序表(时间复杂度为O(1))
void InitList(Sql *&L){L=(Sql *)malloc(sizeof(Sql));  L->length=0; //空表长度为0
}
  1. 创建顺序表
//创建顺序表 (时间复杂度为O(n)->循环体while)
void CreateList(Sql *&L,Elem a[],int n) {L=(Sql *)malloc(sizeof(Sql));InitList(L);//先初始化,再创表for(int i=0; i<n; i++) {L->data[i]=a[i];L->length++;//表长自增,插入一个表长加1}
}
  1. 销毁顺序表
//销毁顺序表 (时间复杂度为O(1))
void DespList(Sql *&L){free(L);
}
  1. 判空
bool isEmpy(Sql *L){return (L->length == 0);//表长为0,则返回true
}
  1. 查找(按位查找、按值查找)
//按位查找
bool GetElem(Sql *L,int n,Elem &e) {if(n<1||n>L->length ||isEmpy(L)) return 0;e=L->data[n-1];//用e来接收查找的值return 1;
}
//按值查找,返回位置
int LocalElem(Sql *L,Elem e){if(isEmpy(L)) return 0;for(int i=0;i<L->length;i++){if(L->data[i]==e){return i+1;}}
}
  1. 插入
//插入元素(按位插入)
bool GetInserter(Sql *&L,int n,Elem e) {//在第n个位置插入eif(n<1||n>L->length+1 || L->length>max) return 0;for(int i=L->length; i>n-1; i--) {L->data[i]=L->data[i-1];//元素后移(从最后一个元素开始往后移)}L->data[n-1]=e;L->length++;return 1;
}
  1. 删除(按位删除、按值删除)
//按位删除
bool GetDelete(Sql *&L,int n,Elem &e){if(n<1||n>L->length||isEmpy(L)) return 0;e=L->data[n-1];for(int i=n-1;i<L->length;i++){L->data[i]=L->data[i+1];}L->length--;return 1;
}
//按值删除
int LocalDelete(Sql *&L,Elem e){if(isEmpy(L)) return 0;for(int i=0;i<L->length;i++){if(L->data[i]==e){//先找到所要删除的那个值的位置for(int j=0;j<L->length;j++){L->data[i]=L->data[i+1];//前移}L->length--;return i+1;}}
}
  1. 顺序表的长度
int ListLength(Sql *L){return (L->length);
}

10.输出所有元素

//输出顺序表中的全部元素
void DispList(Sql *L) {for(int i=0; i<L->length; i++) {printf("%d ",L->data[i]);}
}
  1. 实现主函数main()
int main() {Sql *L;int a[]= {1,2,3,4,5};CreateList(L,a,5);DispList(L);if(isEmpy(L)) printf("空");else printf("\n不空\n");int e=8;GetInserter(L,2,e);DispList(L);GetElem(L,4,e);printf("\n按位查找---第4位的值位:%d\n",e);e=2; printf("\n按值查找---顺序表中值%d的位置为第%d个\n",e,LocalElem(L,e));int n=1;GetDelete(L,n,e);printf("\n按位删除---所删除第%d位的值是:%d\n",n,e);e=4;printf("\n按值删除---所删除值%d的位置为第%d个\n",e,LocalDelete(L,e));DispList(L);printf("\n顺序表长度=%d\n",L->length);DespList(L);DispList(L);return 0;
}

12.全部代码

#include<stdio.h>
#include<malloc.h>
#define max 100 //顺序表最大可能达到的长度
typedef int Elem;
typedef struct SqList{ //定义顺序表 Elem data[max];//存储空间的基地址 int length; //当前长度
}Sql; //顺序表的结构类型为SqList
void InitList(Sql *&L){L=(Sql *)malloc(sizeof(Sql));  L->length=0; //空表长度为0
}
//创建顺序表 (时间复杂度为O(n)->循环体while)
void CreateList(Sql *&L,Elem a[],int n) {L=(Sql *)malloc(sizeof(Sql));InitList(L);//先初始化,再创表for(int i=0; i<n; i++) {L->data[i]=a[i];L->length++;//表长自增,插入一个表长加1}
}
//销毁顺序表 (时间复杂度为O(1))
void DespList(Sql *&L){free(L);
}
bool isEmpy(Sql *L){return (L->length == 0);//表长为0,则返回true
}
//按位查找
bool GetElem(Sql *L,int n,Elem &e) {if(n<1||n>L->length ||isEmpy(L)) return 0;e=L->data[n-1];//用e来接收查找的值return 1;
}
//按值查找,返回位置
int LocalElem(Sql *L,Elem e){if(isEmpy(L)) return 0;for(int i=0;i<L->length;i++){if(L->data[i]==e){return i+1;}}
}
//插入元素(按位插入)
bool GetInserter(Sql *&L,int n,Elem e) {//在第n个位置插入eif(n<1||n>L->length+1 || L->length>max) return 0;for(int i=L->length; i>n-1; i--) {L->data[i]=L->data[i-1];//元素后移(从最后一个元素开始往后移)}L->data[n-1]=e;L->length++;return 1;
}
//按位删除
bool GetDelete(Sql *&L,int n,Elem &e){if(n<1||n>L->length||isEmpy(L)) return 0;e=L->data[n-1];for(int i=n-1;i<L->length;i++){L->data[i]=L->data[i+1];}L->length--;return 1;
}
//按值删除
int LocalDelete(Sql *&L,Elem e){if(isEmpy(L)) return 0;for(int i=0;i<L->length;i++){if(L->data[i]==e){//先找到所要删除的那个值的位置for(int j=0;j<L->length;j++){L->data[i]=L->data[i+1];//前移}L->length--;return i+1;}}
}
int ListLength(Sql *L){return (L->length);
}//输出顺序表中的全部元素
void DispList(Sql *L) {for(int i=0; i<L->length; i++) {printf("%d ",L->data[i]);}
}
int main() {Sql *L;int a[]= {1,2,3,4,5};CreateList(L,a,5);DispList(L);if(isEmpy(L)) printf("空");else printf("\n不空\n");int e=8;GetInserter(L,2,e);DispList(L);GetElem(L,4,e);printf("\n按位查找---第4位的值位:%d\n",e);e=2; printf("\n按值查找---顺序表中值%d的位置为第%d个\n",e,LocalElem(L,e));int n=1;GetDelete(L,n,e);printf("\n按位删除---所删除第%d位的值是:%d\n",n,e);DispList(L);e=4;printf("\n按值删除---所删除值%d的位置为第%d个\n",e,LocalDelete(L,e));DispList(L);printf("\n顺序表长度=%d\n",L->length);DespList(L);DispList(L);return 0;
}

数据结构(C语言)顺序表的定义及基本操作相关推荐

  1. C语言顺序表的定义以及各类操作

    #include <stdio.h> #include <string.h> #include <stdlib.h>#define maxsize 1024 typ ...

  2. 数据结构C语言顺序表入门简单题目你会了吗?

    通常,线性表可以采取顺序存储和链式存储两种,今天我们来讨论下顺序存储结构以及其对应的实现算法. 采用顺序存储是表示线性表的最简单的方法,具体做法是:将线性表中的元素一个接一个地存储在一片相邻的存储区域 ...

  3. 顺序表的定义及基本操作

    目录 顺序存储类型描述 动态存储类型描述 建立顺序表 顺序表的插入操作 顺序表的删除操作 按指查找(顺序查找) 顺序存储类型描述 #define MaxSize 50 //定义线性表的最大长度 typ ...

  4. 数据结构(C语言)中双向链表的定义及基本操作

    一.双向链表的定义及基本操作  单链表中的结点只有一个指向其后继的指针,使得单链表要访问某个结点的前驱结点时,只能从头开始遍历,而双向链表的话 可以直接访问结点的后继结点和前驱结点. 双链表的结点中有 ...

  5. 408数据结构:1.顺序表的定义

    知识总览 静态分配:

  6. 数据结构(C语言)——线性表(定义,基本操作)

    数据结构(C语言)--线性表(定义,基本操作) 一. 线性表的定义 二.线性表的基本操作 什么时候要传入引用"==&=="----对参数的修改结果需要"==带回来 ...

  7. python与js通用的数据结构_五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)...

    7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList { //1. initList(&L):初始化表.构造一个空的线性表.放回值应该是 ...

  8. 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)

    7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList {//1. initList(&L):初始化表.构造一个空的线性表.放回值应该是一 ...

  9. C语言-数据结构-可变长顺序表的初始化,插入和输出

    问题描述: 实现可变长顺序表的建表过程.任务要求:通过顺序表的初始化.插入算法,实现顺序表的建表,并依次输出顺序表元素. [输入形式] 第一行输入整数N(1<=N<=100),表示创建长度 ...

最新文章

  1. 安防行业标准规范大全
  2. 在B站如何不动一根手指,就可以养成6级大佬?大四学生发明养号神器,看完你也会...
  3. hive 调优(一)coding调优
  4. 机器学习(七)——tf.keras搭建神经网络固定模式
  5. boost::python::detail::if_相关的测试程序
  6. MySQL自增字段并发插入导致死锁
  7. sql中索引不会被用到的几种情况
  8. 中国电信学院c语言题库,电脑题库试题精编版.doc
  9. Linux 性能监测
  10. ContOS安装配置MySQL,redis
  11. 所谓周末,就是在家好好做饭、好好睡觉、好好玩游戏
  12. 李航教授展望自然语言对话领域:现状与未来
  13. 【hdoj1021】类斐波那契数列的循环节(f[i]能否mod3?找规律)
  14. 中国计算机学会CCF推荐国际学术会议和期刊目录
  15. 加速想象力 AR/VR 训练营(无锡站)签约挂牌仪式成功举行
  16. [POI2008]BLO-Blockade,洛谷之提高历练地,强连通分量
  17. 淘宝宝贝标题优化2个字:日增10000个IP访问
  18. 鸿蒙系统和安卓哪个更流畅,鸿蒙系统比安卓系统更流畅吗?
  19. 没有了剪辑和台本,papi酱为何要“强行”直播
  20. 喜马拉雅追更攻略:如何订阅更新通知

热门文章

  1. 2018年春季《大学计算机基础》(理科)实验指导书 实验3 问题的描述—数据结构(1)
  2. 【Java AWT 图形界面编程】使用鼠标滚轮缩放 Canvas 画布中绘制的背景图像 ( 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置为缩放中心 示例 )
  3. 线性表顺序存储结构的基本实现
  4. 记录一些关于学习摄影的东西(从入门到放弃)
  5. 智慧校园人脸识别智慧电子班牌源码带文档带演示
  6. 实现“挨拉托色尼的筛子”
  7. 让Ultra Edit和Keil结合的更紧密
  8. 【蓝桥杯选拔赛真题51】Scratch赛车训练 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
  9. 用msconfig修改“处理器数和最大内存”,重启后开不了机,完美解决办法!
  10. 夏天电动汽车起火事故频繁,在于它实在太怕热了