【数据结构与算法】线性表操作(C++)
#include <stdio.h> #define maxSize 100 //定义整型常量maxSize值为100
/*顺序表的结构体定义*/
typedef struct SqList {
int data[maxSize]; //存放顺序表元素的数组
int length; //存放顺序表的长度
}SqList; //顺序表类型的定义 /*单链表节点定义*/
typedef struct LNode {
int data; //data中存放节点数据域
struct LNode *next; //指向后继节点的指针
}LNode; //定义单链表节点类型
/*双链表节点定义*/
typedef struct DLNode {
int data; //data中存放节点的数据域
struct DLNode *prior; //指向前驱节点的指针
struct DLNode *next; //指向后继节点的指针
}DLNode; //定义双链表节点类型 /*例2.1开始*/
/*顺序表查找 返回的是第一个大于寻找元素的地址*/
int findElem(SqList L,int x) {
int i;
for (i = ; i < L.length;++i) {
if (x<L.data[i]) {//对顺序表中的元素从小到大逐个进行判断,看x是否小于当前所扫描到的元素
return i;//如果小于则返回当前位置
}
}
return i;//如果顺序表中不存在比x大的元素,则应将x插入表尾元素之后,返回i来标记这种情况
}
/*引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈。 但是现在(C++中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。*/
void insertElem(SqList &L,int x ) {//因为L本身要发生改变,所以要用引用型
int p, i;
p = findElem(L, x);//调用函数findElem()来找到要插入的位置p
for (i = L.length - ; i >= p;--i) { //从右往左逐个将元素右移一个位置
L.data[i + ] = L.data[i];
}
L.data[p] = x; //将x放在插入位置p上
++(L.length); //表内元素多个一个 因此表长自增1
}
/*例2.1结束*/ /*例2.2开始*/
/*删除顺序表L中下标为p的元素,成功返回1,否则返回0*/
int deleteElem(SqList &L,int p,int &e) {//需要改变的变量用引用型
int i;
if (p<||p>L.length-) {
return ;//位置不对返回0 代表删除不成功
}
e = L.data[p]; //将被删除的元素赋给值e
for (i = p; i < L.length - ;++i) {
L.data[i] = L.data[i + ];
}
--(L.length); //表长-1
return ; //删除成功 返回1
} /*例2.2结束*/ /*初始化顺序表*/ void initList(SqList &L) {//L本身要发生改变 所以用引用型
L.length = ;
} /*求指点位置元素的算法*/
int getElem(SqList L,int p,int &e) {//要改变 所以用引用型
if (p<||p>L.length-) { //p值越界错误 返回0
return ;
}
e = L.data[p];
return ; } void showElem(SqList L) {
int i;
for (i = ; i < L.length;++i) {
printf("%d:%d\n",i,L.data[i]); }
}
void main() {
SqList L;
initList(L);
for (int i = ; i < ;i++) {
insertElem(L, i*);
}
printf("insert over\n");
showElem(L);
int a = findElem(L, );
printf("寻找10返回:%d\n", a);
printf("find over\n");
showElem(L);
insertElem(L, );
printf("insert 35 over\n");
showElem(L);
int j;
deleteElem(L, , j);
printf("delete second over\n");
showElem(L);
}
【数据结构与算法】线性表操作(C++)的更多相关文章
- 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中
//数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中 #include "stdafx.h" #include <iostream> #include &l ...
- C++ 数据结构 1:线性表
1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...
- ACM——线性表操作
线性表操作 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:2795 测试通过:589 描述 线性表是n个元素 ...
- TOJ 1214: 数据结构练习题――线性表操作
描述 请你定义一个线性表,可以对表进行"在某个位置之前插入一个元素"."删除某个位置的元素"."清除所有元素"."获取某个位置的元 ...
- TZOJ 1214: 数据结构练习题――线性表操作
描述 请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”.“删除某个位置的元素”.“清除所有元素”.“获取某个位置的元素”等操作.键盘输入一些命令,可以执行上述操作.本题中,线性表元素为整 ...
- 【C#数据结构系列】线性表
一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...
- 数据结构 - 静态顺序线性表的实行(C语言)
数据结构 - 静态顺序线性表的实行(C语言) 1 获取元素操作 对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个位置元素值返回,其实是非常简单的. 只要i的数值在 ...
- 基于c语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过
白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...
- 数据结构C++版-线性表
PS:资料来源慕课网视频. 一.什么是线性表 线性表是n个数据元素的有限序列. 分类: 二.补充知识点 1.栈和队列有出操作.入操作,对应线性表(数组)为插入元素和删除元素,而线性表中要获取指定元素值 ...
- C语言数据结构——第二章 线性表
二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...
随机推荐
- Android 培训准备资料之project与module的区别(1)
project和module的区别? 现在我们来看看在Android studio中怎样新建一个project (1)file->new->new project. Application ...
- MySQL基础:DCL语句总结
SQL语言大致分为DCL.DDL.DML三种,本文主要介绍MySQL 5.7版本DCL语句. 概述 DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可 ...
- PO设计模式
BasePage类: 在PO模式中抽象封装成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性. 基础页面类中包含公用方法:点击.输入.获取元素等 Page: 每个页面封装为 ...
- linux查看磁盘类型(是否SSD盘)
介绍两种方法: 第一种: cat /sys/block/sda/queue/rotational 注意: 命令中的sba是你的磁盘名称,可以通过df命令查看磁盘,然后修改成你要的 结果: 返回0:SS ...
- TF-IDF算法介绍及实现
目录 1.TF-IDF算法介绍 (1)TF是词频(Term Frequency) (2) IDF是逆向文件频率(Inverse Document Frequency) (3)TF-IDF实际上是:TF ...
- axios用法全解
[前言] 本文介绍下axios用法,希望对大家有所帮助 这里声明一句:请求数据一般放置到哪里?详见下篇文章 [主体] (1)下载 npm i axios --save (2)引入axios模块 方式1 ...
- 第04节-BLE协议抓包演示
在上几篇博客中,形象的讲解了BLE各个层的作用,各个层的数据结构.本篇博客将研究BLE协议抓包.在实际开发中,有一个中央设备(central)和一个外设(Peripheral).所谓中央设备就是指它可 ...
- robotframework-selenium2library各个版本
https://github.com/robotframework/Selenium2Library/downloads
- Helm 安装Kafka
helm镜像库配置 helm repo add stable http://mirror.azure.cn/kubernetes/charts helm repo add incubator http ...
- reduce方法和reduceRight方法
什么是reduce方法? 先来看一下用用法: var arr = [1, 2, 3, 4] var sum = (a, b) => a + b arr.reduce(sum, 0) 由上面代码可 ...