顺序表

计算机内部存储一张线性表是用一组连续地址内存单元,这种存储结构即为顺序存储结构,这种结构下的线性表叫顺序表。

顺序表有两种定义方法:

1.静态定义

2.动态生成

顺序表是最简单的一种线性存储结构,优点:构造简单,操作方便,通过顺序表的首地址(或数组名)可直接对表进行随机存取

缺点:可能浪费存储空间,插入或者删除时候需要对后边一系列的数据进行操作,效率低

下面举两个实例并附上c语言代码+注释来理解

静态顺序表

/********************************************************************************
创建一个静态的顺序表存放整数,大小为10,完成以下的操作
1.输入6个整数,打印出顺序表的内容,并显示表中剩余空间的个数
2.在顺序表的第三个位置处插入元素0,打印出表中的内容,并显示空间中剩余的个数
3.再试图插入表中第11个位置整数0,程序提示超出范围
4.删除表中第6个元素,最后显示空间中剩余的个数
*********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
/**     函数inserElem的作用:顺序表Sqlist第i个位置上插入元素x,并将长度加1 */
/**     向顺序表中插入元素                                                   */
/**     参数Sqlist:表首地址                                                   */
/**     参数*len:表的长度                                                     */
/**     参数i:插入元素的位置                                                 */
/**     参数x:待插入的元素值                                                 */
void insertElem(int Sqlist[] , int *len , int i , int x)
{int t;if(*len==MaxSize || i<1 || i>*len+1)  //长度为len的顺序表可插入的位置为1-len+1 其余的还有表已满的情况均超出范围{printf("非法插入\n");return;}for(t = *len-1 ; t>=i-1 ; t--)Sqlist[t+1] = Sqlist[t];    //将i-1后的元素顺序后移一个元素的位置Sqlist[i-1] = x;                //插入元素*len  =  *len+1;                //表长加1
}/**     函数inserElem的作用:顺序表Sqlist第i个位置上插入元素x,并将长度加1 */
/**     向顺序表中删除元素                                                   */
/**     参数Sqlist:表首地址                                                   */
/**     参数*len:表的长度                                                     */
/**     参数i:插入元素的位置                                                 */
void DelElem(int Sqlist[] , int *len , int i)
{int j;if(i<1 || i>*len){printf("非法删除\n");return;}for(j =i ; j<=*len-1 ; j++)Sqlist[j-1] = Sqlist[j];*len = *len-1;
}
/**     测试函数   根据题目要求   */
int main()
{int Sqlist[MaxSize];int len;int i;for(i = 0 ; i<6 ; i++){scanf("%d",&Sqlist[i]);}len = 6;for(i= 0 ; i<len ; i++)printf("%d\t",Sqlist[i]);printf("\n剩余空间为%d\n" , MaxSize - len);insertElem(Sqlist , &len , 3 , 0);          //表中第三个位置插入整数0for(i= 0 ; i<len ; i++)printf("%d\t",Sqlist[i]);printf("\n剩余空间为%d\n" , MaxSize - len);insertElem(Sqlist , &len , 11 , 0);         //表中第11个位置插入0DelElem(Sqlist  ,   &len , 6);              //删除第六个元素for(i= 0 ; i<len ; i++)printf("%d\t",Sqlist[i]);printf("\n剩余空间为%d\n" , MaxSize - len);return 0;
}
动态顺序表
/*********************************************动态的创建一个顺序表*初始长度10,向顺序表中输入15个整数,并打印*再删除顺序表中的第五个元素,打印出结果********************************************/
#include<stdio.h>
#include<conio.h>
#define MaxSize 10
#include<bits/stdc++.h>
/* 定义一个结构体Sqlist */
typedef struct{int *elem;       //指向顺序表的首地址 int length;         //顺序表中表的长度(表中元素的个数) int listsize;     //顺序表存储空间容量
}Sqlist;
/* 通过一个函数initSqlist实现动态的生成一个顺序表 初始化一个顺序表 */
/* 参数L:Sqlist类型的指针   因为是指针所以可以在函数中直接对顺序表进行操作 */
void initSqlist(Sqlist *L){//调用malloc函数动态分配一段空间,并将空间首地址赋给L的elem成员,L->elem指向顺序表的首单元 L ->elem = (int *)malloc(MaxSize*sizeof(int));   if(!L ->elem)   exit(0);L -> length = 0;            //置0表示表空  刚生成 L -> listsize = MaxSize;  //置MaxSize  表示空间大小
}//Sqlist类型的变量L就代表了一张顺序表 可以灵活操作  L->elem头地址  L->length长度   L->MaxSize容量 /******************** *向顺序表中插入元素*参数L :Sqlist类型的指针*参数i:插入元素的位置*参数item:插入的元素*********************/
void InsertElem(Sqlist *L, int i, int item){//向顺序表L中的第i个位置插入元素itemint *base, *insert_ptr, *p;if(i < 1 || i > L->length+1) exit(0);    //非法插入 退出 if(L->length >= L->listsize){//realloc函数重新追加空间      ******动态顺序表的优势********  静态顺序表内存大小固定不变 动态可以随时扩充 base = (int *)realloc(L->elem, (L->listsize +10)*sizeof(int));L->elem = base;                            //更新内存基址 L->listsize = L->listsize + 100;       //内存空间增大100单元 }insert_ptr = &(L ->elem[i-1]);               //insert_ptr为插入位置 for(p = &(L ->elem[L->length-1]); p >= insert_ptr; p--)*(p+1) =* p;                          //将i-1后的元素顺序后移一个元素的位置 * insert_ptr = item;                     //在第i个位置上插入元素item L->length++;                             //表长+1
} /******************** *从顺序表中删除元素*参数L :Sqlist类型的指针*参数i:删除元素的位置*********************/
void DelElem(Sqlist *L, int i)
{//从顺序表L中删除第i个元素int *delitem, *q;if(i < 1 || i > L->length)    exit(0);        //非法删除 delitem = &(L->elem[i-1]);                   //delitem指向第i个元素 q = L->elem + L->length-1;                 //q指向表尾 for(++delitem; delitem <= q; ++delitem)*(delitem-1) =* delitem;    //将第i位置以后的元素依次前移 L->length--;                                //表长-1 }/******************** *测试函数 *********************/
int main()
{Sqlist l;int i;initSqlist(&l);printf("表中数据:");for(i =0; i<15; i++)InsertElem(&l, i+1, i+1);for(i = 0; i<l.length; i++)printf("%3d",l.elem[i]);printf("\n删除后的结果:");DelElem(&l, 5);for(i = 0; i<l.length; i++)printf("%3d",l.elem[i]);getche();return 0;
}

数据结构—顺序表基本操作(c语言代码)相关推荐

  1. 数据结构-顺序表基本操作(C语言实现)

    参考书:王道考研数据结构 //函数的声明 SqList InitList(l);                                    //初始化一个顺序表 void PrintfLi ...

  2. 顺序表基本操作算法——基础代码(C语言)

    创建一个顺序表(数据元素个数为5), 输出顺序表中的所有数据元素 查找第3个位置上的元素 查找元素15是否在顺序表中,如果在,请输出该元素在顺序表中的位置 在顺序表中的第1个位置插入数据0 删除刚刚插 ...

  3. 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月

    #include <stdio.h> #include <conio.h> //conio是Console Input / Output(控制台输入输出)的简写,其中定义了通过 ...

  4. 数据结构-单链表基本操作-C语言代码

    单链表基本操作 1.头插法建立单链表 2.尾插法建立单链表 3.查找结点 3.修改结点 4.插入结点 5.删除结点 本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表 1.头插法 ...

  5. 室友一把王者的时间我拿捏了数据结构——顺序表(C语言版)

    话不多说,先上整体动态顺序表实现的代码给大家 SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h> ...

  6. 数据结构-顺序表(C语言实现)

    主函数代码(main.c) #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include "sqlist.h&quo ...

  7. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

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

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

  9. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

  10. C语言/C++常见习题问答集锦[八十三]之数据结构顺序表(operand types are error: no match for “operator==“)

    C语言/C++常见习题问答集锦[八十三]之数据结构顺序表{operand types are error: no match for "operator=="} 程序之美 前言 主 ...

最新文章

  1. 基于网格的聚类算法STING
  2. git 的安装和项目建立
  3. Java注释(Annotation)详解
  4. iOS制作一个雷达图,可用于多种场景(一)
  5. WPF实现时间轴(仿Gitee)
  6. OpenCV+3计算机视觉++Python语言实现+第二版pdf
  7. 开发者论坛一周精粹(第五十七期) 阿里云免费套餐 个人备案备注
  8. transform.SimilarityTransform()==>图像的相似变换=等距变换(平移+旋转变换)+均匀尺度缩放
  9. HDU3544 不平等博弈
  10. 计算机学科技术前沿:第31次中国互联网络发展状况统计报告
  11. 《转》武​汉​的​I​T​公​司
  12. 【OpenCV4 官方文档】机器学习概述
  13. 40个超有趣的Linux命令行彩蛋和游戏
  14. C++:实现量化exchangerate汇率测试实例
  15. Qt项目移植出现的问题(No rule to make target ‘……’, needed by ‘……’. Stop.)
  16. Gamma、Linear、sRGB 和Unity Color Space,你真懂了吗?
  17. pk 与fk mysql_什么是MySQL FK的正确命名约定?
  18. 开源动物园一日游!技术圈的这些“飞禽走兽”你认识多少?
  19. 修改SQL Server名称(@@ServerName)
  20. 【Ybt OJ】[数学基础 第2章] 质数与约数

热门文章

  1. 微信小程序图片上传uploadfile失败
  2. Android 编写测试用例
  3. Excel:数据处理
  4. 清华学姐教你如何用python处理excel数据
  5. FFplay使用指南
  6. 读react.js小书 中组件的render的方法(从零学react)
  7. jdk动态代理的原理
  8. 计算机系统结构总复习
  9. 解决: 小程序涉及提供天气查询等相关服务,请选择:工具-天气类目。微信小程序修改类目
  10. C#爬虫项目:SWorld阅读