#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++)的更多相关文章

  1. 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中

    //数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中 #include "stdafx.h" #include <iostream> #include &l ...

  2. C++ 数据结构 1:线性表

    1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...

  3. ACM——线性表操作

    线性表操作 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:2795            测试通过:589 描述 线性表是n个元素 ...

  4. TOJ 1214: 数据结构练习题――线性表操作

    描述 请你定义一个线性表,可以对表进行"在某个位置之前插入一个元素"."删除某个位置的元素"."清除所有元素"."获取某个位置的元 ...

  5. TZOJ 1214: 数据结构练习题――线性表操作

    描述 请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”.“删除某个位置的元素”.“清除所有元素”.“获取某个位置的元素”等操作.键盘输入一些命令,可以执行上述操作.本题中,线性表元素为整 ...

  6. 【C#数据结构系列】线性表

    一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...

  7. 数据结构 - 静态顺序线性表的实行(C语言)

    数据结构 - 静态顺序线性表的实行(C语言) 1 获取元素操作 对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个位置元素值返回,其实是非常简单的. 只要i的数值在 ...

  8. 基于c语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过

    白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...

  9. 数据结构C++版-线性表

    PS:资料来源慕课网视频. 一.什么是线性表 线性表是n个数据元素的有限序列. 分类: 二.补充知识点 1.栈和队列有出操作.入操作,对应线性表(数组)为插入元素和删除元素,而线性表中要获取指定元素值 ...

  10. C语言数据结构——第二章 线性表

    二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...

随机推荐

  1. 英语cabardine麝香cabardine单词

    麝香(cabardine)是麝科动物林麝Moschus berezovskii Flerov. 马麝M. sifanicusPrzewalski或原麝M.moschiferus L.雄体香囊中的干燥分 ...

  2. 交叉编译tmux

    作者:彭东林 邮箱:pengdonglin137@163.com 参考 https://gist.github.com/tessus/5e118d44261a6ab2f198 环境 Qemu-4.1 ...

  3. Linux操作系统安全-证书的申请原理

    Linux操作系统安全-证书的申请原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.APR的中间人攻击 如下图所示,如果在client和server端有一个中间人攻击就比较麻 ...

  4. 【HttpServlet】HttpServlet类

    创建时间:6.15 HttpServlet 但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多,    我们一般创建类继承HttpServlet 实现步骤: 1)创建类继 ...

  5. 和群友聊HashTable转到树和图的数据结构

    AVL树 前中后遍历 树的遍历深度和广度 树是一种特殊的图 人脉关系属于图数据结构: 并查集 最小生成树 union find 正常图的遍历用广度也能做,但是速度低: 并查集可以降到logn 数据小的 ...

  6. NLP学习(5)----attention/ self-attention/ seq2seq/ transformer

    目录: 1. 前提 2. attention (1)为什么使用attention (2)attention的定义以及四种相似度计算方式 (3)attention类型(scaled dot-produc ...

  7. phpcms切换到php7.2后无法修改文章提示Uncaught Error: [] operator not supported for strings

    前段时间将客户的phpcms站点升级到php7.2,相对比较顺利,但是今天他反应文章无法修改了,提示Uncaught Error: [] operator not supported for stri ...

  8. clojure 环境搭建

    以下是clojure 基础环境搭建的几种方式 mac brew install clojure linux curl -O https://download.clojure.org/install/l ...

  9. GLIBC中的库函数fflush究竟做了什么?

    目录 目录 1 1. 库函数fflush原型 1 2. FILE结构体 1 3. fflush函数实现 2 4. fclose函数实现 4 附1:强弱函数名 5 附2:属性__visibility__ ...

  10. vue之父子组件通信

    一. 父-子组件间通信 let children={    template:`<div><h1>{{send}}</h1></div>`,  # 将传 ...