首页 > 其他分享 >数据结构顺序表

数据结构顺序表

时间:2024-09-27 18:49:02浏览次数:3  
标签:顺序 int seqlist 位置 post 数据结构 data

顺序表、单向链表、单向循环链表、双向链表、双向循环链表、顺序栈、链式栈、循环队列(顺序队列)、链式队列

1)逻辑结构:线性结构

2)存储结构:顺序、链式

3)特点:一对一,每一个节点最多有一个前驱和一个后继,首节点无前驱,尾节点无后继

  1. 顺序表

特点:内存连续(数组)

1)逻辑结构 : 线性结构

2)存储结构: 顺序存储结构

3)操作 :增删改查

1.1数组的插入、删除操作

函数名命名规则:

下滑线法:create_empty_seqlist

小驼峰法:createEmptySeqList

大驼峰法:CreateEmptySeqList

练习:

int a[100]={1,2,3,4,5,6,7,8};

//1)向数组的第几个位置插入数据

int *p //保存的数组的首地址

int n//n代表的是数组中有效的元素个数(非数组的长度size 100)8

int post;//位置 代表的是第几个位置,数组元素下标 位置的编号从0开始 position

int data;//插入到数组中的数据

void insertIntoA (int *p,int post,int data,int n)

{

//1.将n-1位置到post位置的数据整体向后移动一位

//2.将新数据data赋值到post位置

}

//删除数组指定位置的数据

void deleteFromA(int *p, int n, int post)

{

//1.将post+1位置----》n-1位置所有数据整体向前移动一个位置,覆盖删除

}

arr.c

#include <stdio.h>
//1)向数组的第几个位置插入数据
void insertIntoA(int *p, int post, int data, int n)
{
    int i;
    // 1.将n-1位置到post位置的数据整体向后移动一位
    for(i=n-1;i>=post;i--)
        p[i+1]=p[i];
    // 2.将新数据data赋值到post位置
    p[post] = data;
}
// 2)删除数组指定位置的数据
void deleteFromA(int *p, int n, int post)
{
    int i;
    // 1.将post+1位置----》n-1位置所有数据整体向前移动一个位置,覆盖删除
    for(i=post+1;i<=n-1;i++)
        p[i-1]=p[i];
}
//3)遍历输出A
void showA(int *p,int n)
{
    for(int i=0;i<n;i++)
        printf("%d ",p[i]);
    printf("\n");
}

int main(int argc, char const *argv[])
{
    int a[100] = {1, 2, 3, 4, 5, 6, 7, 8};
    showA(a,8);
    insertIntoA(a,2,300,8);
    showA(a,9);
    deleteFromA(a,9,2);
    showA(a,8);
    return 0;
}

1.2修改为last版本

#include <stdio.h>
int last = 7;//n-1,最后一个有效元素下标

//1)向数组的第几个位置插入数据
void insertIntoA(int *p, int post, int data)
{
    int i;
    // 1.将last位置到post位置的数据整体向后移动一位
    for(i=last;i>=post;i--)
        p[i+1]=p[i];
    // 2.将新数据data赋值到post位置
    p[post] = data;
    //3. 最后一个有效元素下标+1
    last++;
}
// 2)删除数组指定位置的数据
void deleteFromA(int *p,int post)
{
    int i;
    // 1.将post+1位置----》last位置所有数据整体向前移动一个位置,覆盖删除
    for(i=post+1;i<=last;i++)
        p[i-1]=p[i];
    //2. 最后一个有效元素下标-1
    last--;
}
//3)遍历输出A
void showA(int *p)
{
    for(int i=0;i<=last;i++)
        printf("%d ",p[i]);
    printf("\n");
}

int main(int argc, char const *argv[])
{
    int a[100] = {1, 2, 3, 4, 5, 6, 7, 8};
    showA(a);
    insertIntoA(a,2,300);
    showA(a);
    deleteFromA(a,2);
    showA(a);
    return 0;
}

1.3顺序表相关操作

#ifndef _SEQLIST_H__
#define _SEQLIST_H__
#include <stdio.h>
#include <stdlib.h>

#define N 5
typedef struct seq
{
    int data[N];
    int last;
}seqlist_t;

//1.创建一个空的顺序表
seqlist_t *CreateEpSeqlist();//返回的是申请空间的首地址
//2.向顺序表的指定位置插入数据
int InsertIntoSeqlist(seqlist_t *p, int post,int data);//post第几个位置,data插入的数据
//3.遍历顺序表sequence 顺序 list 表
void ShowSeqlist(seqlist_t *p);
//4.判断顺序表是否为满,满返回1 未满返回0
int IsFullSeqlist(seqlist_t *p);
//5.判断顺序表是否为空
int IsEpSeqlist(seqlist_t *p);
//6.删除顺序表中指定位置的数据post删除位置
int DeletePostSeqlist(seqlist_t *p, int post);
//7.清空顺序表
void ClearSeqList(seqlist_t *p);
//8.修改指定位置的数据
int ChangePostSeqList(seqlist_t *p,int post,int data);//post被修改的位置,data修改成的数据
//9.查找指定数据出现的位置
int SearchDataSeqList(seqlist_t *p,int data);//data代表被查找的数据


#endif


标签:顺序,int,seqlist,位置,post,数据结构,data
From: https://blog.csdn.net/2301_77416261/article/details/142600349

相关文章

  • Java中的栈数据结构及其应用
    Java中的栈数据结构及其应用栈是一种线性数据结构,遵循后进先出(LIFO)的原则,即最后插入的元素最先被移除。栈的基本操作包括入栈(push)、出栈(pop)和查看栈顶元素(peek)。本文将介绍栈的基本结构、操作及在JDK中的应用。栈的基本结构一个简单的栈可以用数组或链表实现,下面是基于链......
  • oracle rac启停顺序
    一、rac关闭顺序1.停止em服务emctlstatusdbconsoleemctlstopdbconsole#两个节点操作2.停止数据库srvctlstopdatabase-dprod-oimmediate3.停监听srvctlstatuslistenersrvctlstoplistener#停所有监听srvctlstoplistener-n#rac1停某个监听......
  • C++顺序结构(2)学习任务
    在坚果云中注册免费个人云盘一、视频下载存放在规划好的文件夹中,并观看学习1、变量存储.注释2、四则运算.输入3、认识设置DEV-C++4、第一个C++程序5、头文件6、命名空间7、cout语句8、什么是变量?9、表达式和赋值语句10、计数器11、自加自减运算符12、课后题目113、......
  • 数据结构编程实践20讲(Python版)—02链表
    本文目录02链表linked-listS1说明S2示例单向链表双向链表循环链表S3问题:反转单向链表求解思路Python3程序S4问题:双向链表实现历史浏览网页求解思路Python3程序S5问题:基于循环链表的玩家出牌顺序求解思路Python3程序往期链接01数组02链表linked-lis......
  • 算法与数据结构——归并排序
    归并排序归并排序(mergesort)是一种基于分治策略的排序算法,包含下图所示的“划分”和“合并”阶段。划分阶段:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题。*合并阶段**:当子数组长度为1时终止划分,开始合并,持续地讲左右两个较短的有序数组合并为......
  • 数据结构——链表
    c++数据结构p3链表链表的每一个节点都是独立分配出来的从当前节点能够找到下一个节点Node(链表)=date(数据域)+next(地址域)地址域:存储的是下一个节点的地址最后一个地址域是nullptrstructNode{intdata;Node*next;}特点:每一个节点都是在堆内存上独立new出来......
  • 顺序表
    顺序表和数组十分相似,添加数据时需要先判断数据插入的位置是否合法,然后从后往前(防止前面的数据将后面的覆盖)将插入位置之后的数据元素后移1位。删除首先也是判断删除的位置是否合法,将要删除的数据保存在一个变量中(方便日后查找),接着从前往后(防止后面的数据覆盖前面的数据)将被删除......
  • 【EBS】Form触发器执行顺序
    简单整理一点Form页面中的触发器执行顺序内容。一、打开一个Form页面时:(1)PRE-FORM(2)PRE-BLOCK(BLOCK级)(3)WHEN-NEW-FORM-INSTANCE(4)WHEN-NEW-BLOCK-INSTANCE(5)WHEN-NEW-RECORD-INSTANCE(6)WHEN-NEW-ITEM-INSTANCE二、F11查询过程(1)WHEN-CLEAR-BLOCK(2)WHEN-NEW-RECORD-INS......
  • log型数据结构优化DP解题报告(uoj)
    交作业用T220417最长公共上升子序列不难看出状态同最长公共子序列,但由于上升条件限制,加一个限制:\(f_{i,j}\)表示\(a_{1...i}\)匹配\(b_{1...j}\)且\(a_i\)必须做结尾的最长公共上升子序列长度转移方程为\(f_{i,j}=f_{i,j-1}\)(if\(a_i\neqb_j\))\(f_{i,j}=\max_{k......
  • 数据结构之——队列
    一、队列概述        队列是一种操作受限的线性表,其限制条件为允许在表的一端进行插入,而在表的另一端进行删除。插入的一端叫做队尾,删除的一端叫做队头。向队列中插入新元素的行为称为进队,从队列中删除元素的行为称为出队。例如军训的时候,都排成一列,有头有尾。假设你......