【数据结构与算法】线性表操作(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,当线性表不为空时,表中的元素的个数就是线 ...
随机推荐
- CRM product model的用法
User scenario An example from sap help For a car, the interior, the engine capacity, and the exterio ...
- SPring boot jpa 封装查询条件
最近使用spring data jpa做了两个项目,对于动态查询的不友好做了个类似hibernate的封装,记录也分享下 首先定义一个所有条件的容器,继承Specification /** * 定义一 ...
- 轻量级.Net ORM SqlSuger项目实战
SqlSuger,清垃圾ORM实战例子. //添加引用 using SqlSugar; //在构造函数中实例化SqlSuger clinet = new SqlSugarClient(new Conn ...
- intellij idea 新建springboot工程pom.xml报错
今天使用idea新建的springboot工程pom.xml文件报错如下 1. 问题 'settings.xml' has syntax errors less... (Ctrl+F1) Inspec ...
- Linux shell变量详解
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个 ...
- 枚举ENUM的tostring() valueof()name()和values()用法
从jdk5出现了枚举类后,定义一些字典值可以使用枚举类型; 枚举常用的方法是values():对枚举中的常量值进行遍历; valueof(String name) :根据名称获取枚举类中定义的常量值; ...
- Git问题
1. LF will be replaced by CRLF rm -rf .git // 删除.git git config --global core.autocrlf false //禁用自动转 ...
- 201671010402-陈靖 实验十四 团队项目评审&课程学习总结
项目 内容 任课教师博客主页链接 https://www.cnblogs.com/nwnu-daizh/ 作业要求链接地址 https://www.cnblogs.com/nwnu-daizh/p/1 ...
- JDOJ 1133 分段公司利润
JDOJ 1133: 分段公司利润 JDOJ传送门 Description 企业发放的奖金根据利润提成.利润低于或等于100000元的,奖金可提10%; 利润高于100000元,低于200000元(1 ...
- The happy secret to better work,https://www.ted.com/talks/shawn_achor_the_happy_secret_to_better_work/transcript#t-100352
When I was seven years old and my sister was just five years old, we were playing on top of a bunk b ...