【数据结构与算法】线性表操作(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,当线性表不为空时,表中的元素的个数就是线 ...
随机推荐
- 【selenium】基于python语言,如何用select选择下拉框
在项目测试中遇到了下拉框选择的控件,来总结下如何使用select选择下拉框: 下图是Select类的初始化描述,意思是,给定元素是得是select类型,不是就抛异常.接下来给了例子:要操作这个sele ...
- tomcat采坑
1. tomcat采坑 1.1. 采坑 今天又踩了个以前踩过的坑,运维系统迁移到docker,使用的tomcat版本是tomcat8,而原来的版本是tomcat7.0.53,导致的结果就是系统间请求一 ...
- QML 缓存(QML Caching)
最近一直在学习QML,在Qt Creator中新建Qt Quick工程后,尝试不断地修改qml文件来进行试验,qml文件需要反反复复的修改. Qt Widget工程,如果修改了cpp代码后,直接构建或 ...
- android studio学习----Warning:Unable to find optional library: org.apache.http.legacy
主要是没有 android-23的版本 1.导入工程以后 Error:Could not find com.Android.tools.build:gradle:1.3.1. Searched in ...
- 【转载】Gradle学习 第十章:网络应用快速入门
转载地址:http://ask.android-studio.org/?/article/8 This chapter is a work in progress.这一章是一项正在进行中的工作. Th ...
- c++指针全攻略
1.指针概念理解 int* p 定义一个指针(推荐使用这种写法int* ,理解上有好处) p 指针变量: * 间接运算符(访问符),代表访问该地址所指向的空 ...
- Linux C/C++编译过程中的各种not declared in this scope
Linux C/C++编译时经常会"XXX was not declared in this scope" 原因可能是以下几种: 变量名或函数名写错了; 忘记定义了 没有成功链接到 ...
- Shell 编程 正则表达式
本篇主要写一些shell脚本正则表达式的使用基础. 概述 正则表达式分为基础正则表达式(Regular Expression)与扩展正则表达式(Extended Regular Expression) ...
- angular6 使用tooltip
准备 为了使用tooltip,可以安装ng-bootstrap组件,它包含两个依赖: angular:5.0以上版本: bootstrap css: 4.0版本. 安装好bootstrap之后,更新a ...
- PS下修改背景色
1.打开要修改的图片 2.选择左侧的快速选择工具,右键选择魔法棒 3.在图片上点击左键选取背景 4.菜单栏选择编辑,点击填充 5.在填充选项框中选择“颜色",点击选取要使用的颜色,确定