【数据结构-线性表】顺序表

关于顺序表

顺序表结构是指一块地址连续的存储空间依次存储数据元素

可以把顺序表看成一支队伍,执行插队,或者一个人出队这些操作就是顺序表的插入和删除操作

顺序表特点

  • 逻辑关系相邻的两个元素,物理位置也必须相邻(例如第0个元素与第1个元素,他们在顺序表中的位置是相邻的,他们在内存中也是相邻的)
  • 可以随机存取表中的元素
  • 运算复杂度O(n)

顺序表的插入操作

插入操作就是和插队一样,小明要插队,那么这个位置和后面的同学都要向后移动一个位置空出来这个位置,小明才能挤进去

  1. 首先检查插入元素的位置是否正确,不能小于顺序表的第0个位置,大于顺序表的长度-1
  2. 将要插入的位置的元素及其以后的元素整体向后移动一位,空出位置
  3. 插入元素,顺序表长度+1
/*往顺序表中插入数据,list表示顺序表,loc表示把元素插入到哪个位置,num表示要插入的元素*/
void insert(List *list, int loc, int num){
    if (loc < 0 || loc>list->length) {//判断loc的值是否符合要求
        return;
    }
    else {
        for (int i = list->length; i > loc; i--) {
            list->data[i] = list->data[i - 1];//将要插入位置的元素及其以后所有元素向后移动一位
        }
        list->data[loc] = num;//将顺序表loc位置赋值为num
        list->length++;//顺序表长度+1
    }
}

顺序表的删除操作

删除操作就和出队一样,小明正在排队,突然肚子痛要去厕所,小明走了,空出来这个位置,这个位置以后所有同学都要向前一个位置,来填补这个空位

1. 首先检查要删除的位置是否合法

2. 将要删除的这个元素保存下来

3. 将这个位置以后的所有元素整体向前移动一位,覆盖这个位置的元素

4. 顺序表长度-1

/*从线性表中删除元素,loc表示删除的位置,temp表示删除的元素*/
int delete(List *list, int loc, int *temp){
    if (loc < 0 || loc>list->length-1) {
        return 0;
    }
    else {
        *temp = list->data[loc];
        for (int i = loc; i < list->length - 1; i++) {
            list->data[i]= list->data[i + 1];//将要删除位置以后所有元素向前移动一位
        }
        list->length--;//顺序表长度-1
        return 1;
    }
}

顺序表的查询操作

查询元素所在位置


/*找出elem在顺序表中的位置*/
int locateElem(List *list, int elem) {
    int i = 0;
    while (i < list->length - 1 && list->data[i] != elem) {//当出界或者找到这个元素结束循环
        i++;
    }
    if (i >= list->length) {
        return 0;
    }
    else {
        return i;
    }
}

查询loc位置的元素是谁


/*取顺序表位置为loc的元素值*/
int getElem(List *list, int loc) {
    if (loc<0 || loc>list->length - 1) {
        printf("取数位置超出界限");
            return 0;
    }
    else {
        return list->data[loc];
    }
}

使用C语言实现顺序表

#include<stdio.h>
#define SIZE 10

/*顺序表结构*/
typedef struct{
    int data[SIZE];//数据存储数组
    int length;//顺序表目前的长度,初始值为0
}List;

/*往顺序表中插入数据,list表示顺序表,loc表示把元素插入到哪个位置,num表示要插入的元素*/
void insert(List *list, int loc, int num){
    if (loc < 0 || loc>list->length) {//判断loc的值是否符合要求
        return;
    }
    else {
        for (int i = list->length; i > loc; i--) {
            list->data[i] = list->data[i - 1];//将要插入位置的元素及其以后所有元素向后移动一位
        }
        list->data[loc] = num;//将顺序表loc位置赋值为num
        list->length++;//顺序表长度+1
    }
}

/*从线性表中删除元素,loc表示删除的位置,temp表示删除的元素*/
int delete(List *list, int loc, int *temp){
    if (loc < 0 || loc>list->length-1) {
        return 0;
    }
    else {
        *temp = list->data[loc];
        for (int i = loc; i < list->length - 1; i++) {
            list->data[i]= list->data[i + 1];//将要删除位置以后所有元素向前移动一位
        }
        list->length--;//顺序表长度-1
        return 1;
    }
}

/*取顺序表位置为loc的元素值*/
int getElem(List *list, int loc) {
    if (loc<0 || loc>list->length - 1) {
        printf("取数位置超出界限");
            return 0;
    }
    else {
        return list->data[loc];
    }
}

/*找出elem在顺序表中的位置*/
int locateElem(List *list, int elem) {
    int i = 0;
    while (i < list->length - 1 && list->data[i] != elem) {//当出界或者找到这个元素结束循环
        i++;
    }
    if (i >= list->length) {
        return 0;
    }
    else {
        return i;
    }
}

/*输出顺序表中的所有元素*/
void display(List *list) {
    for (int i = 0; i < list->length; i++) {
        printf("顺序表中的元素为%d\n", list->data[i]);
    }
}

int main()
{
    List list;
    list.length = 0;
    insert(&list, 0, 1);
    insert(&list, 1, 2);
    insert(&list, 2, 3);
    insert(&list, 3, 4);
    insert(&list, 4, 5);

    display(&list);
    int temp = 0;
    delete(&list, 2, &temp);
    printf("删除的元素为%d\n", temp);

    display(&list);

    int loc = locateElem(&list, 4);
    printf("元素4所在顺序表的位置为第%d个", loc);

    return 0;
}
时间: 2024-08-29 21:31:05

【数据结构-线性表】顺序表的相关文章

数据结构和算法-数据结构-线性结构-顺序表 链表和哈希表

####################################################### """ # 线性表是最基本的数据结构之一,在实际程序中应用非常广泛,它还经常被用作更复杂的数据结构的实现基础. # 根据线性表的实际存储方式,分为两种实现模型: # 顺序表, # 链表, # 下面分别进行研究, """ ####################################################### &qu

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

数据结构笔记(二)--顺序表

线性表 线性结构:最常用,最简单的一种数据结构,其中的数据元素是有序且是有限的,其 基本特点: 存在一个唯一的被称为 第一个 的数据元素 存在一个唯一的被称为 最后一个 的数据元素 除第一个元素外,每一个元素均有唯一 一个直接前驱 除最后一个元素外,每一个元素均有唯一 一个直接后继 2.1 线性表的逻辑结构 2.1.1线性表的定义 线性表(Linear List) :是由n个数据类型相同的数据元素(结点)组成的有限序列.其中 n 为不小于0的整数.数据元素的个数 n 称为线性表的长度 相关术语:

【数据结构】之顺序表和链表的比较

1.顺序表 顺序表的优点: (1) 方法简单,各种高级语言中都有数组,容易实现.(2) 不用为表示结点间的逻辑关系而增加额外的存储开销.(3) 顺序表具有按元素序号随机访问的特点. 顺序表的缺点: (1) 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低.(2) 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置:预先分配过小,又会造成溢出. 2.链表 链表的优点: (1) 在链表中做插入删除操作时,不会影响前面和后面的节点,因此对n较大的链表

线性表——顺序表与单链表学习小结

线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表.链表.栈.队列.字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线.但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储. 顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改. 链表 链表是一种物理存储结构上非连续.非顺序的存储结构,数据

线性表&gt;&gt;顺序表---&gt;逆置所有元素

1 /*顺序表中所有的元素逆置 2 * 3 */ 4 #include <iostream.h> 5 using namespace std; 6 7 int main(){ 8 void reverse_arr(int arr[],int n); 9 int a[]={0,1,2,3,4,5,6,7}; 10 int n=7; 11 reverse_arr(a,n); 12 for(int i=0;i<=n;i++){ 13 cout << a[i] << &q

C#(数据结构):1.顺序表结构(2)

人生总有那么多未完的篇章,但是有时候今天你没完成的可能你以后再也不会完成.承诺的一切兴许也变成了过眼云烟.想抓住,握紧的拳头却使他们溜的更快.人生恰如初见,几多的欣喜. ----------------------------------------------------------------------------------------------万恶的分割线------------------------------------------------ 分割线都受不了了.好吧之前我们说

C#(数据结构):1.顺序表结构

我们程序员有三大优点:懒.困.自负.很荣幸我这三点都占了.但是木有关系这丝毫动摇不了我学习的决心.因为技术没有止境. -------------------------------------------------------------------------------------万恶的分割线------------------------------------------------------ 一个人生的分割线. 曾多少次我告诉自己要和昨天的自己说再见.不带走自己的过去,新中幻想着永