本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程。

例:删除元素

问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素。
要求:时间复杂度为O(n)、空间复杂度为O(1)的算法

解法0:用基本运算实现,不满足复杂度要求
(注:本文中所需要的list.h和list.cpp见点击参照…)

#include "list.h"
#include <stdio.h>void delnode1(SqList *&L,ElemType x)
{int i;ElemType e;while((i=LocateElem(L,x))>0){ListDelete(L, i, e);}
}//用main写测试代码
int main()
{SqList *sq;ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};CreateList(sq, a, 10);printf("删除前 ");DispList(sq);delnode1(sq, 7);printf("删除后 ");DispList(sq);return 0;
}

解法1:复制要保留的元素

#include "list.h"
#include <stdio.h>void delnode2(SqList *&L,ElemType x)
{int k=0,i; //k记录非x的元素个数for (i=0; i<L->length; i++)if (L->data[i]!=x){L->data[k]=L->data[i];k++;}L->length=k;
}//用main写测试代码
int main()
{SqList *sq;ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};CreateList(sq, a, 10);printf("删除前 ");DispList(sq);delnode2(sq, 7);printf("删除后 ");DispList(sq);return 0;
}

例:分离元素

问题 :设顺序表有10个元素,其元素类型为整型。 设计一个算法,以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面

解法1

#include "list.h"
#include <stdio.h>void move1(SqList *&L)
{int i=0,j=L->length-1;ElemType pivot=L->data[0];  //以data[0]为基准ElemType tmp;while (i<j)             //从区间两端交替向中间扫描,直至i=j为止{while (i<j && L->data[j]>pivot)j--;            //从右向左扫描,找第1个小于等于pivot的元素while (i<j && L->data[i]<=pivot)i++;            //从左向右扫描,找第1个大于pivot的元素if (i<j){tmp=L->data[i]; //L->data[i]和L->data[j]进行交换L->data[i]=L->data[j];L->data[j]=tmp;}}tmp=L->data[0];         //L->data[0]和L->data[j]进行交换L->data[0]=L->data[j];L->data[j]=tmp;
}//用main写测试代码
int main()
{SqList *sq;ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};CreateList(sq, a, 10);printf("移动前 ");DispList(sq);move1(sq);printf("移动后 ");DispList(sq);return 0;
}

解法2

#include "list.h"
#include <stdio.h>void move2(SqList *&L)
{int i=0,j=L->length-1;ElemType pivot=L->data[0];  //以data[0]为基准while (i<j)                 //从顺序表两端交替向中间扫描,直至i=j为止{while (j>i && L->data[j]>pivot)j--;                //从右向左扫描,找一个小于等于pivot的data[j]L->data[i]=L->data[j];  //找到这样的data[j],放入data[i]处i++;while (i<j && L->data[i]<=pivot)i++;                //从左向右扫描,找一个大于pivot的记录data[i]L->data[j]=L->data[i];  //找到这样的data[i],放入data[j]处j--;}L->data[i]=pivot;
}//用main写测试代码
int main()
{SqList *sq;ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};CreateList(sq, a, 10);printf("移动前 ");DispList(sq);move2(sq);printf("移动后 ");DispList(sq);return 0;
}

数据结构例程——线性表顺序存储的应用相关推荐

  1. 数据结构:线性表顺序存储

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.线性表(List):0个或多个数据结构的有限序列 二.线性表的顺序存储结构 1.顺序存储定义 2.顺序存储方式 3.顺序 ...

  2. 关于数据结构链表问题(C语言实现)—— 线性表顺序存储设计与实现

    这是我的第一篇博客(内容为废话) 现在马上面临毕业的我,发现整理总结问题真的非常重要,刚刚开始学习数据结构,并且非科班出身的我,感觉得到压力非常大,所以开始学习完后在这进行回忆,复习学习.在这里要感谢 ...

  3. 数据结构之线性表之顺序存储结构(3)

    1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数 ...

  4. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  5. 《数据结构与算法》——线性表顺序存储结构的插入与删除

    什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之间的关系是一对 ...

  6. python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...

    /*** *SeqList.c *Copyright (c) 2015, XZG. All rights reserved. *Purpose: * 线性表顺序存储结构的创建.数据插入.数据获取.获取 ...

  7. 用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍

    我们先来想一想什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之 ...

  8. 数据结构—线性表顺序存储插入和删除操作

    线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...

  9. 数据结构线性表顺序存储结构和主要算法实现

    (1) 线性表的定义. 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且仅有一个直接前驱,数据元素之间的关系是一对一的关系 常用的List操作: Operation ...

最新文章

  1. 华为eNSP和SecureCRT连接乱码问题
  2. openresty开发系列14--lua基础语法3函数
  3. 【Nginx】错误: [emerg] “proxy_pass“ cannot have URI part in location given by regular expression,...
  4. 【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】
  5. react(79)--ant design确认框
  6. 如果有这样一台服务器……
  7. java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...
  8. Exchange Server 2016管理系列课件46.DAG管理之Powershell创建DAG
  9. python从网址爬图片协程_python 用 gevent 协程抓取海量网页
  10. matlab2c使用c++实现matlab函数系列教程-median函数
  11. 云​大数据和计算技术周报(第47期)
  12. 数据库原理及应用教程第四版课后答案
  13. 求模板啊,求软著说明书模板啊
  14. Windows编程之虚拟桌面实现原理
  15. 小组取什么名字好_起名字大全宝宝起名字:起名字免费:女孩姓赵取什么名字好...
  16. Python调用百度API进行人像动漫化
  17. 开发者投稿—百度大脑新品体验之肤色检测
  18. 报错解决:symbol lookup error-----undefined symbol: JLI_StringDup
  19. 设置单独进程打开资源管理器有效防止电脑假死!
  20. 怎么清晰地理解、表达 IaaS 、 PaaS 、 SaaS ?

热门文章

  1. EAR项目构建的几种方式
  2. Linux 最简单的驱动程序hello world
  3. Zabbix监控环境的搭建
  4. nagios出现乱码
  5. 15种网站最差的用户体验
  6. java美元兑换,(Java实现) 美元汇率
  7. git本地仓库关联远端仓库
  8. C语言——实现用链表存储学生信息,当输入0退出输入,并查找学号为3的学生是否存在
  9. 让你眼花缭乱的JS代码~~
  10. linux压缩和解压缩类命令|--zip/unzip指令