ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线性表的顺序存储

2021-11-04 20:03:54  阅读:175  来源: 互联网

标签:顺序 线性表 ++ SeqList elem int length 顺序存储


1.1 线性表的顺序存储

1.1.0 绪论

预定义常量和类型

1 #define TRUE 1;
2 #define FALSE 0;
3 #define MAXSIZE 100;
4 #define OK 1;
5 #define ERROR 0;

1.1.1 顺序表

顺序存储是指在内存中用一块地址连续的存储空间按顺序存储线性表的各个数据元素。采用顺序存储结构的线性表成为“顺序表”。

设第一个元素存放地址为LOC(a1),每个元素占用的空间大小为d个字节,则元素ai的存放地址为:

LOC(ai)=LOC(a1)+d*(i-1)

只要确定了存储线性表的起始位置,线性表中任意元素都可随机存储,既线性表示一种可随机存储结构。

常用一维数组来描述顺序表的数据存储,表长可变,为了运算方便,用整型变量length记录当前线性表中元素的个数,线性顺序表的顺序存储结构可描述如下:

1 #include<stdio.h>
2 #define MAXSIZE<线性表可能达到的最大长度>
3 typedef int MlemType:
4 typedef struct{
5     ElemType elem[MAXSIZE];
6     int length;//线性表长度 
7 };

定义一个顺序表:

                                 SeqList *L;

顺序表的长度为 L->Length,数据元素是 L->elem[1] ~ L->elem[length]

 

1.1.2 顺序表的基本运算

顺序表的初始化既构造一个空表,将表长length设为0,表示表中没有数据。

1 //顺序表的初始化
2 void Init_SeqList(SeqList *L){
3     L->length=0;
4 } 

调用方法:

                               Init_SeqList(&L)

顺序表的插入操作如下:

  • 将an ~ ai按从后向前的顺序向下移动,为新元素让出位置。
  • x置入空出的第i个位置
  • 修改表长
 1 //顺序表的插入
 2 int Insert_SeqList(SeqList *L,int i,ElemType x){
 3     int j;
 4     if(L->length==MAXSIZE-1){
 5         printf("表满");
 6         return OVERFLOW; 
 7     }
 8     if(i<i||L->Length<i){
 9         printf("位置满");
10         return ERROR; 
11     }
12     for(j=L->length;j>=i;j--)
13         L->elem[j+1] = L->elem[j];
14     L->elem[i] = x;
15     L->length++;
16     return TRUE;
17 } 

顺序表的删除

  • 将a i+1 ~a n 依次向上移动
  •  将length值减一
 1 //顺序表的删除 
 2 int Delete_SeqList(SeqList *L,int i,ElemType *e){
 3     int j;
 4     if(i<1||i>L->Length){
 5         printf("不存在第i个元素");
 6         return ERROR; 
 7     }
 8     *e = L->elem[i]; 
 9     for(j=i;j<=L->Length;j++)
10         L->elem[j] = L->elem[j+1];
11     L->length--;
12     return TRUE;
13 } 

顺序表中按值查找

1 //顺序表的按值查找 
2 int Location_SeqList(SeqList *L,ElemType x){
3     int i=1;
4     while(i<=L-Length&&L->elem[i]!=x){
5         i++;
6     }
7     if(i>L->length) return FALISE;
8     else return i;
9 } 

练习题

有两个顺序表A和B,其元素均按从小到大顺序排序,编写一个算法,将它们合并成一个顺序表,要求元素表C中的元素也按升序排序。

 1 //顺序表的按值查找 
 2 void merge(SeqList *A,SeqList *B,SeqList *C){
 3     int i=1,j=1,k=1;
 4     while(i<=A-Length&&j<B->Length){
 5         if(A->elem[i]<B->elem[j]){
 6             C->elem[k++] = A->elem[i++];
 7         }
 8         else C->elem[k++] = B->elem[j++];
 9     }
10     while(<=A->length){
11         C->elem[k++]=A->elem[i++];
12     }
13     while(j<=B->length){
14         C->elem[k++]=B->elem[j++];
15     }
16     C->length = A->length+B->length;
17 } 

 

标签:顺序,线性表,++,SeqList,elem,int,length,顺序存储
来源: https://www.cnblogs.com/Teens-in-Times/p/15506483.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有