当前位置:   article > 正文

数据结构(线性表:顺序表详解)_顺序表只能包含一个表头元素

顺序表只能包含一个表头元素

在数据结构的全部结构中中,线性结构属于最简单并且最普通的结构,而线性结构中的顺序结构属于在全部线性结构中最简单的结构

顺序表是具有相同特性的数据元素组成的一个有限序列,顺序表中的所有元素是有限个,并且呈一定的线性排列,所有元素的特性相同。可以是字符串型或者是基本整形。在长度为n的顺序表中,我们以L[0]表示顺序表的第一个元素。相当于表头。以L[n-1]表示最后一个元素。一般c语言中以0开头。

顺序表有3大特性:

(1)有穷性:顺序表中的元素是有限个的。

(2)一致性:所有的元素具有相同的数据类型。

(3)序列性:所有的元素相对位置是线性的,每个位置只存在一个元素。

顺序表排列方式如下图:

 先建立一个表示顺序表的结构,代码实现如下:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define maxsize 50 //定义线性表的最大长度
  4. typedef int elemtype; //定于数据类型,elemtype的数据类型为基本整形,也可以定义为其他类型
  5. typedef struct
  6. {
  7. elemtype data[maxsize]; //data为是记录顺序表的地址
  8. int length; //length为线性表的长度
  9. }Sqlist;

线性表有9大基本操作,分别为

1.InitList(&L):初始化线性表,构建一个空表。

2.DestroyList(&L):销毁线性表,释放线性表中全部元素。

3.ListEmpty(L):判断线性表是否为空,若为空就返回1,不为空返回0。

4.ListLength(L):求线性表的长度然后返回线性表中元素的个数。

5.DispList(L):输出线性表,依次输出线性表中的每个元素。

6.GetElem(L,i,&e):求线性表中的第i个位置的元素值,并用e返回。

7.LocataElem(L,e):按元素值查找,返回第一个与值e元素相等的元素的位置。

8.ListInsert(&L,i,e):在第i个位置插入元素e。

9.ListDelete(&L,i,&e):删除第i个元素,并且将第i个元素值用e返回。

下面对代码实现来讲解。

首先我们通过数组来建立一个顺序表,假设有一个长度为n的数组a[n],将数组a[n]建立成一个顺序表:代码实现如下

  1. void CreateList(Sqlist *&L,elemtype a[],int n)
  2. {
  3. L=(Sqlist*)malloc(Sqlist); //首先给顺序表L,分配一个存储空间。
  4. for(int i=0;i<n;i++) //将数组a[]中的元素依次赋给顺序表中相同位置的元素。
  5. L->data[i]=a[i];
  6. L->length=n; //将顺序表中长度改为n,整个顺序表建立完成。
  7. }

1.初始化顺序表

初始化线性表是构造一个空表,当表的长度为0是,表中无元素,就成了一个空表,代码实现如下

  1. void InitList(Sqlist *&L)
  2. {
  3. L=(Sqlist*)malloc(Sqlist); //先给顺序表分配一个存储空间
  4. L->length=0; //在将顺序表的长度定义为0。此时,顺序表为空
  5. }

2.销毁顺序表

销毁顺序表是将表中全部元素都删除,释放顺序表L的存储空间,代码实现如下:

  1. void DestroyList(Sqlist *&L)
  2. {
  3. free(L); //释放顺序表中全部空间
  4. }

3.判断顺序表是否为空

该操作是通过返回顺序表长度来判断,如果顺序表长度为0,表示顺序表长度为0,则为空,返回1。若顺序表长度不为0,则返回0。代码实现如下:

  1. bool ListEmpty(Sqlist *L)
  2. {
  3. return (L->length==0); //L->length表示线性表的长度,若长度为0返回真,否则返回1
  4. }

4.返回顺序表的长度

通过求顺序表中的元素的数量,来返回顺序表的长度,L->length表示线性表的长度,相当于元素的个数,我们通过返回L->length来实现该操作,代码实现如下:

  1. int ListLength(Sqlist *L) //该操作需要返回一个值,需要使用int开头
  2. {
  3. return L->length; //length记录表的长度,直接返回求出元素的个数
  4. }

5.输出顺序表

输出顺序表是将顺序表的全部元素依次通过屏幕显示出来,从首元素开始一直到尾元素,当L为空时不显示值域

  1. void DispList(Sqlist *L)
  2. {
  3. for(int i=0;i<L->length;i++) //从首元素开始到尾元素,依次输出。L->length为元素个数,
  4. printf("%5d",L->data[i]); //从L->data[0]开始,一直到L->data[length-1];
  5. printf("\n");
  6. }

6.求顺序表中某个元素值

要求出顺序表中的第i个元素的元素值,必须先要找到第i个元素,然后在将元素值赋值给e后返回。

代码实现如下:

  1. bool GetElem(Sqlist *L,int i,elemtype &e) //i表示表中第i个位置
  2. {
  3. if(i<0||i>L->length) //如果i不在顺序表可以查找的范围内则返回错误。
  4. return false;
  5. else
  6. {
  7. i--; //从0开始记数,第i个位置表示为L->data[i-1];
  8. e=L->data[i]; //将第i个元素赋给e,然后返回真,查找完成
  9. return true;
  10. }
  11. }

7.按元素查找LocateElem(L,e)

扫描顺序表L中的所有元素,如果有等于e的元素,这返回改元素的位置,没有则返回0。代码实现如下:

  1. void LocateElem(Sqlist *L,elemtype e)
  2. {
  3. int i;
  4. for(i=0;i<L->length;i++) //从L->data[0]开始到L->[length-1]依次查找
  5. {
  6. if(L->data[i]==e)
  7. {
  8. return i+1; //若在表中有元素的值域为e,返回该元素的位置,循环停止。
  9. break;
  10. }
  11. }
  12. if(i==L->length) //若i=L->length则表示没有找到,返回为0
  13. return 0;
  14. }

8.插入数据元素

将某一固定的元素插入某一固定的位置,需要两个步骤,先应该将该位置后面的所有元素都向后移动一位,然后在将元素插在这个位置上面。代码实现如下:

  1. bool ListInsert(Sqlist *&L,int i,elemtype e)
  2. {
  3. if(i<1||i>L->length) //如果i不在L内,返回错误。
  4. return false;
  5. else //从0开始计数,将i-1;找到应该插入的位置
  6. {
  7. i--;
  8. for(int j=L->length;j>i;j--) //从尾部开始到i,将所有的元素向前移动一位,在将i插入。
  9. L->data[j]=L->data[j-1];
  10. L->data[i]=e;
  11. L->length++; //顺序表的长度增加一位,返回为真。
  12. return true;
  13. }
  14. }

9.删除数据元素

和插入数据元素类似,先找到需要删除元素的位置,在将该元素的值域通过e返回,在将该位置的元素覆盖,然后将后面的全部元素向前移动一位,顺序表减去一位,删除完成,代码实现如下:

  1. bool ListDelete(Sqlist *&L,int i,elemtype &e)
  2. {
  3. if(i<1||i>L->length) //如果i不在长度范围内,返回错误。
  4. return false;
  5. else
  6. {
  7. i--; //找到需要删除的元素的位置,使用e返回
  8. e=L->data[i];
  9. for(int j=i;j<L->length-1;j++) //从该位置到表尾的全部元素依次前移动一位
  10. L->data[j]=L->data[j+1];
  11. L->length--; //顺序表的长度减去一位,返回为真。删除完成
  12. return true;
  13. }
  14. }

顺序表的全部基本操作已经讲解完成,谢谢您的阅读。若有不足或者错误之处,欢迎在评论区指出,谢谢。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/765983
推荐阅读
相关标签
  

闽ICP备14008679号