线性表顺序存储结构实现

  1 #include<stdio.h>
  2 #define MAXSIZE 20
  3
  4 typedef int ElemType;
  5 typedef struct
  6 {
  7     ElemType data[MAXSIZE];
  8     int length;
  9 }SqList;
 10
 11 void InitList(SqList *L)
 12 {
 13     L->length=5;
 14     int i;
 15     for(i=0;i<5;i++)
 16     {
 17         L->data[i]=i+1;
 18     }
 19     return;
 20 }
 21 int ListLength(SqList L)
 22 {
 23     return L.length;
 24 }
 25 bool ListEmpty(SqList L)
 26 {
 27     if(L.length==0)return false;
 28     else return true;
 29 }
 30
 31 void ClearList(SqList *L)
 32 {
 33     L->length=0;
 34     return;
 35 }
 36
 37 bool GetElem(SqList L,int i,int *e)
 38 {
 39     if(i==0||i>L.length||L.length==0)return false;
 40     else
 41     {
 42         *e=L.data[i-1];
 43         return true;
 44     }
 45 }
 46 int LocateElem(SqList L,int e)
 47 {
 48     int i;
 49     if(L.length==0)return 0;
 50     else{
 51     for(i=0;i<L.length;i++)
 52     {
 53         if(L.data[i]==e)
 54         {
 55             return i+1;
 56             break;
 57         }
 58         else if(i==L.length-1&&L.data[L.length-1]!=e)
 59         {
 60             return 0;
 61             break;
 62         }
 63     }}
 64 }
 65 bool ListInsert(SqList *L,int i,int e)
 66 {
 67     if(i<=0||i>L->length+1||L->length==MAXSIZE)return false;
 68     else {
 69         //插入数据位置不在表尾
 70         if(i<=L->length){
 71         int k;
 72         for(k=L->length-1;k>=i-1;k--)
 73         {
 74             L->data[k+1]=L->data[k];
 75         }}
 76         L->data[i-1]=e;
 77         L->length++;
 78         return true;
 79     }
 80 }
 81 void PrintList(SqList L)
 82 {
 83     int i;
 84     for(i=0;i<L.length;i++)
 85     {
 86         printf("%d ",L.data[i]);
 87     }
 88     printf("\n");
 89     return;
 90 }
 91 bool ListDelete(SqList *L,int i,int *e)
 92 {
 93     if(L->length==0||i<=0||i>L->length)return false;
 94     else
 95     {
 96         *e=L->data[i-1];
 97         if(i<L->length)//删除位置不在表尾
 98         {
 99             int k;
100             for(k=i;k<L->length;k++)
101             {
102                 L->data[k-1]=L->data[k];
103             }
104         }
105         L->length--;
106         return true;
107     }
108
109 }
110 int main()
111 {
112     SqList L;
113     //初始化
114     InitList(&L);
115     //判断是否为空
116     if(ListEmpty(L))printf("非空\n");
117     else printf("空\n");
118     //读取顺序表中元素个数
119     printf("顺序表中元素个数为%d\n",ListLength(L));
120     //读取
121     int i,e;
122     printf("请输入您要读取的数字序号:");
123     scanf("%d",&i);
124     if(GetElem(L,i,&e))
125         printf("第%d个元素是%d\n",i,e);
126     else if(!GetElem(L,i,&e))
127         printf("发生错误请重新输入\n");
128     //查找
129     printf("请输入您要查找的数字:");
130     scanf("%d",&e);
131     if(LocateElem(L,e)!=0)printf("您查找的数字序号为%d\n",LocateElem(L,e));
132     else printf("您查找的数字不存在\n");
133     //插入
134     printf("请输入您要插入的数字:");
135     scanf("%d",&e);
136     printf("请输入您要插入的位置:");
137     scanf("%d",&i);
138     ListInsert(&L,i,e);
139     printf("插入后的顺序表如下:\n");
140     PrintList(L);
141     //删除
142     printf("请输入您要删除的数字位置:");
143     scanf("%d",&i);
144     ListDelete(&L,i,&e);
145     printf("您删除的数字为%d\n",e);
146     printf("删除后的顺序表如下:\n");
147     PrintList(L);
148     //清空
149     ClearList(&L);
150     //判断是否为空
151     if(ListEmpty(L))printf("非空\n");
152     else printf("空\n");
153     return 0;
154 }
时间: 2024-10-11 07:46:23

线性表顺序存储结构实现的相关文章

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

数据结构与算法-线性表顺序存储结构删除操作的实现

这一章节我们来看一下线性表顺序存储结构删除操作的简单实现 package com.ray.testobject; public class Test { private Object[] list; public Object[] getList() { return list; } /** * 初始化list * * @param num * 元素个数 */ private void iniList(int num) { list = new Object[num]; for (int i =

数据结构与算法-总结线性表顺序存储结构的优缺点

这一章节主要总结线性表顺序存储结构的优缺点. 在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度: 存储.读取:O(1) 插入.删除:O(n) 优点: 1.无需为表中的逻辑关系增加额外的存储空间 2.可以快速存取表中对象 缺点: 1.插入和删除需要移动大量的对象 2.存储设备的碎片化 3.当线性表过大的时候,很难确定长度 版权声明:本文为博主原创文章,未经博主允许不得转载.

线性表顺序存储结构的c语言实现

线性表顺序存储结构用C实现的操作 <1>声明一个线性表的顺序存储结构 <2> 初始化顺序线性表 <3>判断是否为空 <4>清空列表 <5>返回当前长度(线性表内元素个数) <6>返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 <7>返回L中第1个与e满足关系的数据元素的位序.若这样的数据元素不存在,则返回值为0 <8>在L中第i个位置之前插入新的数据元素e,L的长度加1 <9>

线性表—顺序存储结构

线性表——顺序存储结构 我理解的顺序存储就是 存储的一组元素在内存中呈线性排列,地址相邻,就像火车一样,每个车厢都可以看做是一个元素,元素门内首尾相连且地址相邻,书看的是高一凡老师的书,学完后自己写一下总结和体会,一来加深印象,二来可以方便自己复习. 顺序存储结构似乎都是用数组来实现的,也就是以数组为核心,外面加了许多很方便的操作(函数)进行封装,然后就说这叫[顺序存储结构]——数组的深加工之后的产品 顺序存储结构的基本功能有以下几个: name:     sqlist private: T *

线性表-顺序存储结构

线性表-顺序存储结构 顺序存储结构 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素 三个属性 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置 线性表的最大存储容量:数组的长度MaxSize 线性表的当前长度:length 数据长度和线性表长度的区别 数据长度就是数组的长度,存放线性表的存储空间的长度,存储分配后这个量一般是不变的 线性表长度是线性表中数据元素的个数,随着线性表的删除插入操作,这个长度是改变的 在任何时刻,数组的长度大于等于线性表

数据结构与算法——线性表顺序存储结构

今天总结一下数据结构中的线性表中的顺序存储结构,这是一种比较简单的结构. 首先,看一下什么是线性表. 什么是线性表? 线性表是一种简单的数据结构,数据元素之间是一对一的关系,即除了第一个和最后一个元素外其余元素都是首尾相接的.元素的个数称为线性表的长度,长度为零则表示线性表为空. 什么是线性表的循序存储结构? 线性表中的顺序存储结构就是把线性表中的元素按逻辑次序依次存放在一组地址连续的存储空间中,也把这种线性表称为顺序表.根据顺序表的特点,通常是用数组来存储元素的. 下面就看具体的实现(C++)

数据结构 - 线性表顺序存储结构

线性表 线性表是一种典型的线性结构.其基本特点是线性表中的数据元素是有序且是有限的.在这种结构中: ① 存在一个唯一的被称为"第一个"的数据元素: ② 存在一个唯一的被称为"最后一个"的数据元素: ③ 除第一个元素外,每个元素均有唯一一个直接前驱: ④ 除最后一个元素外,每个元素均有唯一一个直接后继. 线性表(Linear List) :是由n(n≧0)个数据元素(结点)a1,a2, -an组成的有限序列.该序列中的所有结点具有相同的数据类型. 线性表中的数据元素

线性表顺序存储结构的优缺点

优点:1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间. 2.可以快速的存取表中任一位置的元素. 缺点:1.插入和删除操作需要移动大量的元素. 2.当线性表长度变化较大时,难以确定存储空间的容量. 3.造成存储空间的"碎片". ======================================== 可是有一点需要注意,可以快速的存取表中任一位置的"存",和"插入"有什么区别呢? "存"的意思表达的就是给线性表

线性表-顺序存储结构(即数组)

1.定义 线性表:零个或多个元素组成的有限序列.第一个无前驱,最后一个无后继,其余元素都有一个前驱和后继.元素的个数为n. 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称.例如,编程语言中的整型,浮点型等. 抽象数据类型ADT:对数据类型进行抽象,抽取出事务具有的普遍性的本质,是特征的概括,而不是细节.(数据类型和相关的操作捆绑在一起) 线性表抽象数据类型(List): Data:线性表的数据对象集合为{a,b,c...},每一个元素的数据类型为DataType Opera