美文网首页
顺序存储结构的基本操作

顺序存储结构的基本操作

作者: mark_x | 来源:发表于2019-08-17 21:57 被阅读0次
// 使用malloc函数为结构体申请动态内存空间
#include <stdio.h>
#include <stdlib.h>

#define MAX 128

typedef struct
{
    int data[MAX];
    int length;
}SqList;

void getElem(SqList *L, int i, int **sp)
{
    if (L->length == 0 || i < 1 || i > L->length)
    {
        printf("Call failure!");
    }
    
    *sp = &(L->data[i-1]);
    
}


void listInsert(SqList *L, int i, int num)
{
    // 错误检查
    if (L->length == MAX)  // 顺序表已满
    {
        printf("顺序表已满,无法插入新元素!");
    }
    if (i <= 0 || i > L->length+1) // 注意:L=length+1是允许的,即新增元素在最后
    {
        printf("元素插入位置超出范围!");
    }
    
    // 如果不是插入最后一个位置,元素后移,为新元素空出一个位置
    if (i <= L->length)
    {
        for (int k = L->length-1; k >= i-1; k--)
        {
            L->data[k+1] = L->data[k];
        }
    }
    
    L->data[i-1] = num;
    L->length++;
}

// 初始条件:顺序线性表已存在
// 操作结果:在L中第i个位置插入新的元素e,L的长度加1
int delElem(SqList *L, int i)
{
    if (L->length == 0 || i < 1 || i > L->length)
    {
        printf("Call failure!");
    }
    
    // 删除只需要往前移动覆盖就可以
    // 将删除的值返回
    int del_elem;
    del_elem = L->data[i-1];
    for (int k = i-1; k < L->length - 1; k++)
    {
        L->data[k] = L->data[k+1];
    }
    
    L->length--;
    return del_elem;
}

void printList(SqList *L)
{
    for (int i = 0; i < L->length; i++)
    {
        printf("%d  ", L->data[i]);
    }
    printf("\n");
}

int main()
{
    SqList *sqlist;// 定义结构体指针
    sqlist = (SqList *)malloc(sizeof(SqList)); // 申请动态内存空间
    
    for (int i = 0; i < 20; i++)    // 初始化结构体对象
    {
        sqlist->data[i] = i + 1001;
    }
    sqlist->length = 20;
    
    printList(sqlist);
    
    // 操作1:查询获得顺序列表元素
    int *ptr_elem = NULL, posi;
    printf("要查询第几个数:");
    scanf("%d", &posi);
    getElem(sqlist, posi, &ptr_elem);  // 获得数组的第二个元素,使指针ptr_elem指向该元素
    
    printf("数组的第2个元素为:%d\n", *ptr_elem);
    
    // 操作2:插入操作

    int elem;
    printf("要在什么位置插入什么数,如(11-1001): ");
    scanf("%d-%d", &posi, &elem);
    listInsert(sqlist, posi, elem);
    printList(sqlist);
    
    // 操作3:删除操作
    int del_elem;
    printf("要删除第几个数:");
    scanf("%d", &posi);
    del_elem = delElem(sqlist, posi);
    printf("删除的数是:%d\n", del_elem);
    printList(sqlist);
    
    
    return 0;
}

相关文章

  • 顺序存储结构的基本操作

  • 作业帮做-栈结构验证

    顺序栈操作验证 实验目的 掌握栈的顺序存储结构; 验证栈的操作特性; 掌握顺序栈的基本操作实现方法。 实验内容 建...

  • 数据结构之队列的链式存储结构

    之前写了队列的顺序存储结构,队列的定义及操作见 数据结构之队列的顺序存储结构 队列的链式存储结构与操作实现 队列接...

  • 1-3存储结构的形式

    数据元素的存储结构形式有哪两种?基本概念是什么? 数据结构的两种存储结构:顺序存储和链式存储。 顺序存储结构:是把...

  • 数据结构之栈的链式存储结构

    之前写了栈的顺序存储结构,对栈的定义和操作进行了说明 数据结构之栈的顺序存储结构 现在接着写栈的链式存储结构 栈的...

  • 顺序存储结构的线性表

    线性表的顺序存储结构指的是用一段地址连续的存储单元依次存储线性表的数据元素。 取元素操作 插入操作 删除操作 顺序...

  • 数据结构-线性表

    归纳 线性关系、线性表的定义,线性表的基本操作。 线性表的顺序存储结构与链式存储结构(包括单(向)链表、循环链表和...

  • 我与数据结构的二次博弈(二)

    线性表的顺序存储结构及实现 1. 顺序存储结构的基本思想: 用一组连续的存储单元依次存储数据元素,数据元素...

  • 线性表的链式存储结构Java实现

    有了前面文章的铺垫:数据结构的基本理解线性表及其顺序存储结构的理解线性表的顺序存储结构java实现线性表链式存储就...

  • 查找和排序算法的复杂度分析-查找篇

    顺序查找 说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。 基本思想:顺序查找也称为线形查找,属于无序查...

网友评论

      本文标题:顺序存储结构的基本操作

      本文链接:https://www.haomeiwen.com/subject/ibflsctx.html