首页 > 编程语言 >6-61 顺序表基本运算算法的实现

6-61 顺序表基本运算算法的实现

时间:2024-08-12 18:23:09浏览次数:19  
标签:返回 顺序 运算 int 元素 length 61 算法 SqList

线性表实验一 实现顺序表各种基本运算的算法

目的: 领会顺序表存储结构和掌握顺序表中各种基本运算算法设计。

内容: 编写程序,实现顺序表的各种基本运算算法(假设顺序表的元素类型ElemType 为char),并在此基础上设计一个主程序,完成如下功能:

(1)初始化顺序表L。

(2)依次插入a、b、c、d、e元素。

(3)输出顺序表L。

(4)输出顺序表L长度。

(5)判断顺序表L是否为空。

(6)输出顺序表L的第3个元素。

(7)输出元素a的位置。

(8)在第4个元素位置上插入f元素。

(9)输出顺序表L。

(10)删除顺序表L的第3个元素。

(11)输出顺序表L。

(12)释放顺序表L。

顺序表类型定义:


#define MaxSize 50 typedef char ElemType; typedef struct { ElemType data[MaxSize]; //存放顺序表元素 int length; //存放顺序表的长度 } SqList; //声明顺序表的类型

函数接口定义:


/** * 初始化顺序表L。 */ void InitList(SqList * &L); /** * 释放顺序表L。 */ void DestroyList(SqList * &L); /** * 判断顺序表L是否为空表。 * 空表返回true,非空表返回false。 */ bool ListEmpty(SqList * L); /** * 返回顺序表L的元素个数。 */ int ListLength(SqList * L); /** * 输出顺序表L。 */ void DispList(SqList * L); /** * 获取顺序表L中第i(1≤i≤L->length)个元素,将其值存入e,然后返回true; * 如果不能获取到第i个元素,返回false。 */ bool GetElem(SqList * L, int i, ElemType &e); /** * 在顺序表L中查找元素e。 * 如果存在e,则返回e的逻辑序号,否则返回0。 */ int LocateElem(SqList * L, ElemType e); /** * 在顺序表L中第ii(1≤i≤L->length)个位置上插入元素e。 * 插入成功,返回true。插入不成功,返回false。 */ bool ListInsert(SqList * &L, int i, ElemType e); /** * 从顺序表L中删除第ii(1≤i≤L->length)个元素。 * 删除成功,返回true。删除不成功,返回false。 */ bool ListDelete(SqList * &L, int i, ElemType &e);

裁判测试程序样例:


#include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef char ElemType; typedef struct { ElemType data[MaxSize]; //存放顺序表元素 int length; //存放顺序表的长度 } SqList; //声明顺序表的类型 /** * 初始化顺序表L。 */ void InitList(SqList * &L); /** * 释放顺序表L。 */ void DestroyList(SqList * &L); /** * 判断顺序表L是否为空表。 * 空表返回true,非空表返回false。 */ bool ListEmpty(SqList * L); /** * 返回顺序表L的元素个数。 */ int ListLength(SqList * L); /** * 输出顺序表L。 */ void DispList(SqList * L); /** * 获取顺序表L中第i(1≤i≤L->length)个元素,将其值存入e,然后返回true; * 如果不能获取到第i个元素,返回false。 */ bool GetElem(SqList * L, int i, ElemType &e); /** * 在顺序表L中查找元素e。 * 如果存在e,则返回e的逻辑序号,否则返回0。 */ int LocateElem(SqList * L, ElemType e); /** * 在顺序表L中第ii(1≤i≤L->length)个位置上插入元素e。 * 插入成功,返回true。插入不成功,返回false。 */ bool ListInsert(SqList * &L, int i, ElemType e); /** * 从顺序表L中删除第ii(1≤i≤L->length)个元素。 * 删除成功,返回true。删除不成功,返回false。 */ bool ListDelete(SqList * &L, int i, ElemType &e); int main() { SqList *L; ElemType e; printf("顺序表的基本运算如下:\n"); printf(" (1)初始化顺序表L\n"); InitList(L); printf(" (2)依次插入a,b,c,d,e元素\n"); ListInsert(L, 1, 'a'); ListInsert(L, 2, 'b'); ListInsert(L, 3, 'c'); ListInsert(L, 4, 'd'); ListInsert(L, 5, 'e'); printf(" (3)输出顺序表L:"); DispList(L); printf(" (4)顺序表L长度:%d\n", ListLength(L)); printf(" (5)顺序表L为%s\n", (ListEmpty(L) ? "空" : "非空")); GetElem(L, 3, e); printf(" (6)顺序表L的第3个元素:%c\n", e); printf(" (7)元素a的位置:%d\n", LocateElem(L, 'a')); printf(" (8)在第4个元素位置上插入f元素\n"); ListInsert(L, 4, 'f'); printf(" (9)输出顺序表L:"); DispList(L); printf(" (10)删除L的第3个元素\n"); ListDelete(L, 3, e); printf(" (11)输出顺序表L:"); DispList(L); printf(" (12)释放顺序表L\n"); DestroyList(L); return 0; } /* 请在下面填写代码 */

输入样例:

参见题目功能说明。


输出样例:

参见题目功能说明。
整体输出顺序表时,每个数据后面一个空格。

顺序表的基本运算如下:
  (1)初始化顺序表L
  (2)依次插入a,b,c,d,e元素
  (3)输出顺序表L:a b c d e 
  (4)顺序表L长度:5
  (5)顺序表L为非空
  (6)顺序表L的第3个元素:c
  (7)元素a的位置:1
  (8)在第4个元素位置上插入f元素
  (9)输出顺序表L:a b c f d e 
  (10)删除L的第3个元素
  (11)输出顺序表L:a b f d e 
  (12)释放顺序表L
    

解题 


/**
 * 初始化顺序表L。
 */
void InitList(SqList * &L){
    L = (SqList*)malloc(sizeof(SqList));
    L->length = 0;
}

/**
 * 释放顺序表L。
 */
void DestroyList(SqList * &L){
    //free(L->data);
    free(L);
    return;
}

/**
 * 判断顺序表L是否为空表。
 * 空表返回true,非空表返回false。
 */
bool ListEmpty(SqList * L){
    return L->length == 0;
}

/**
 * 返回顺序表L的元素个数。
 */
int ListLength(SqList * L){
    return L->length;
}

/**
 * 输出顺序表L。
 */
void DispList(SqList * L){
    for(int i = 0; i <= L->length-1; i++){
        printf("%c ", L->data[i]);
    }
    printf("\n");
}

/**
 * 获取顺序表L中第i(1≤i≤L->length)个元素,将其值存入e,然后返回true;
 * 如果不能获取到第i个元素,返回false。
 */
bool GetElem(SqList * L, int i, ElemType &e){
    if(ListEmpty(L)){
        return false;
    }
    if(i < 1 || i > L->length){
        return false;
    }
    e = L->data[i-1];
    return true;
}

/**
 * 在顺序表L中查找元素e。
 * 如果存在e,则返回e的逻辑序号,否则返回0。
 */
int LocateElem(SqList * L,  ElemType e){
    for(int i = 0; i <= L->length-1; i++){
        if(L->data[i] == e){
            return i+1;
        }
    }
    return 0;
}

/**
 * 在顺序表L中第ii(1≤i≤L->length)个位置上插入元素e。
 * 插入成功,返回true。插入不成功,返回false。
 */
bool ListInsert(SqList * &L, int i,  ElemType e){
    //int j;
    if(i > L->length+1 || i < 1){
        return false;
    }
    if(L->length == MaxSize) return false;
    for(int j = L->length-1; j >= i-1; j--){
        L->data[j+1] = L->data[j];
    }
    L->data[i-1] = e;
    L->length++;
    return true;
}

/**
 * 从顺序表L中删除第ii(1≤i≤L->length)个元素。
 * 删除成功,返回true。删除不成功,返回false。
 */
bool ListDelete(SqList * &L, int i, ElemType &e){
    int j;
    if(L->length == 0)
        return false;
    if(i < 1 || i > L->length) return false;
    e = L->data[i-1];
    for(j = i; j <= L->length-1; j++){
        L->data[j-1] = L->data[j];
    }
    L->length--;
    return true;
}

标签:返回,顺序,运算,int,元素,length,61,算法,SqList
From: https://blog.csdn.net/Y1593578642/article/details/141138952

相关文章

  • 「代码随想录算法训练营」第三十五天 | 动态规划 part8
    121.买卖股票的最佳时机题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/文章讲解:https://programmercarl.com/0121.买卖股票的最佳时机.html题目难度:简单视频讲解:https://www.bilibili.com/video/BV1Xe4y1u77q题目状态:有一半的思路思路一:贪心对......
  • 足球比赛结果预测系统:遗传算法的研究
    引言最近有个朋友时运不济,自己胡乱玩被足球预测的推子骗了一回又一回,明明我就是专门做足球预测的,偏偏不信我还赌气说自己有本事一个人也能成,现在隔得跟个小怨妇似得,觍着脸回来找我要我传他心得,没办法,好歹十几年的兄弟,他再怎么发病也只能原谅他了,于是就有了这篇文章。不过足球......
  • 【算法学习】排序算法汇总
    冒泡排序1、冒泡排序简介冒泡排序的英文BubbleSort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动冒泡排序的原理:冒泡轮数:每一轮只能将该轮中最大的数排至最后面。即第一轮只能确定将末位上的数归位......
  • 【算法学习】算法时间复杂度
    时间复杂度的计算时间复杂度简单计算(一层、两层、多层循环)相当于轨迹追踪法:设执行次数为k,按照循环条件阿布算法课学习链接01区别算法(Algorithm)和程序(Program)算法程序设计阶段实施阶段相关领域知识程序员任何语言、伪代码编程语言独立于硬件......
  • 安捷伦E5061B网络分析仪3L5选件 二手E5061B Agilent E5061B
     一、AgilentE5061B网络分析仪的特点1.高精度测量:AgilentE5061B网络分析仪采用测试技术,具有高精度的测量能力,可以对各种电子元器件、电路和系统进行准确的测试和分析。2.宽频带测试:该设备具有宽频带测试范围,可以覆盖从直流到微波频段的多个频段,满足不同领域的测试需求。......
  • [算法] 2-SAT简记
    真的是简记2-SAT$2-SAT$用于求解一个变量只有两种情况的适应性问题(就是有没有解以及输出一种方案);其实可以类比二分图最大匹配(但其实两者的差别还是很大的);算法流程对于每一个变量,我们都有两种情况,$true$和$false$;而题目中给我们的,是形如{$A=true/false$或......
  • Java入门学习——Day04 运算符
            在Java编程中,运算符是基本的构建块,用于执行各种操作,如算术、比较和逻辑操作。了解运算符的使用对于编写正确的代码非常重要。目录一、算数运算符1.加法2.减法3.乘法4.除法二、赋值运算符1.赋值2.加赋值3.减赋值4.乘赋值5.除赋值6.取余赋值三、......
  • 自增/自减运算符
     C语言中有两个特殊的运算符,即自增运算符“++”和自减运算符“--”。自增、自减运算符对变量的操作效果分别是使变量增加1和减少1。--counter;//自减前缀符号grade--;//自减后缀符号++age;//自增前缀符号height++;//自增后缀......
  • Day27 贪心算法part1
    任务455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这......
  • 国际国密双算法SSL证书申请方法
    国际国密双算法证书的申请方法主要遵循以下步骤,以JoySSL为例进行说明:一、选择CA机构首先,需要选择一个提供国际国密双算法SSL证书服务的CA机构。JoySSL作为国内自主品牌,不仅提供双算法SSL证书,还确保整个验签过程都在国内完成,重要数据不会出境,全面满足国家相关规定。二、注册......