#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. Matlab混入模式(Mixin)

    Mixin是一种类,这种类包含了其他类要使用的特性方法,但不必充当其他类的父类.Matlab无疑是支持多继承的.我们可以利用 Matlab 的这种特性,实现一种叫做 Mixin 的类.MixIn的目的 ...

  2. 学习笔记之知识图谱 (Knowledge Graph)

    Knowledge Graph - Wikipedia https://en.wikipedia.org/wiki/Knowledge_Graph The Knowledge Graph is a k ...

  3. 红黑树实现(c/c++)

    红黑树 简介 一直想写的一种数据结构,非常厉害的思想,插入,删除,查找,修改,都是\(log_2 n\)的时间复杂度. 比AVL更强大的是,插入删除综合效率比AVL要优秀一点. 性质 一颗红黑树是满足 ...

  4. MySQL数据库(三)--表相关操作(二)之约束条件、关联关系、复制表

    一.约束条件  1.何为约束 除了数据类型以外额外添加的约束 2.约束条件的作用 为了保证数据的合法性,完整性 3.主要的约束条件 NOT NULL # 标识该字段不能为空,默认NULL,可设置NOT ...

  5. Jmeter 在 beanshell 脚本中写日志

    JMETER 在执行时,会写日志数据,我们在编写脚本的时候也可以自己写日志. 日志记录再jmeter 的bin 目录的 jmeter.log 文件中. jmeter 比较人性化,它在这里提供了脚本可以 ...

  6. Linux shell for循环结构

    Linux Shell   for循环结构 循环结构            1:循环开始条件      2:循环操作      3:循环终止的条件 shell语言          for,while ...

  7. 二十、Python与Mysql交互

    先安装一个python与MySQL交互的包:MySQL-python $ gunzip MySQL-python-1.2.2.tar.gz $ tar -xvf MySQL-python-1.2.2. ...

  8. discuz支持的mysql的配置(docker版本)

    作个笔录. conf/discuz.conf [client] port=3306 default-character-set=utf8 [mysqld] port=3306 default-stor ...

  9. linux服务器NAT后无法在内网通过外部IP访问内部服务的问题

    场景一: 将外网访问192.168.100.10的80端口转发到192.168.75.5:8000端口. # iptables -t nat -A PREROUTING -d 192.168.100. ...

  10. 排序算法-冒泡排序(Java)

    package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className BubbleSort * @date 20 ...