数据结构例程——线性表顺序存储的应用
本文是数据结构基础系列网络课程(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;
}
数据结构例程——线性表顺序存储的应用相关推荐
- 数据结构:线性表顺序存储
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.线性表(List):0个或多个数据结构的有限序列 二.线性表的顺序存储结构 1.顺序存储定义 2.顺序存储方式 3.顺序 ...
- 关于数据结构链表问题(C语言实现)—— 线性表顺序存储设计与实现
这是我的第一篇博客(内容为废话) 现在马上面临毕业的我,发现整理总结问题真的非常重要,刚刚开始学习数据结构,并且非科班出身的我,感觉得到压力非常大,所以开始学习完后在这进行回忆,复习学习.在这里要感谢 ...
- 数据结构之线性表之顺序存储结构(3)
1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数 ...
- 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码
数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...
- 《数据结构与算法》——线性表顺序存储结构的插入与删除
什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之间的关系是一对 ...
- python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...
/*** *SeqList.c *Copyright (c) 2015, XZG. All rights reserved. *Purpose: * 线性表顺序存储结构的创建.数据插入.数据获取.获取 ...
- 用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍
我们先来想一想什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之 ...
- 数据结构—线性表顺序存储插入和删除操作
线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...
- 数据结构线性表顺序存储结构和主要算法实现
(1) 线性表的定义. 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且仅有一个直接前驱,数据元素之间的关系是一对一的关系 常用的List操作: Operation ...
最新文章
- 华为eNSP和SecureCRT连接乱码问题
- openresty开发系列14--lua基础语法3函数
- 【Nginx】错误: [emerg] “proxy_pass“ cannot have URI part in location given by regular expression,...
- 【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】
- react(79)--ant design确认框
- 如果有这样一台服务器……
- java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...
- Exchange Server 2016管理系列课件46.DAG管理之Powershell创建DAG
- python从网址爬图片协程_python 用 gevent 协程抓取海量网页
- matlab2c使用c++实现matlab函数系列教程-median函数
- 云​大数据和计算技术周报(第47期)
- 数据库原理及应用教程第四版课后答案
- 求模板啊,求软著说明书模板啊
- Windows编程之虚拟桌面实现原理
- 小组取什么名字好_起名字大全宝宝起名字:起名字免费:女孩姓赵取什么名字好...
- Python调用百度API进行人像动漫化
- 开发者投稿—百度大脑新品体验之肤色检测
- 报错解决:symbol lookup error-----undefined symbol: JLI_StringDup
- 设置单独进程打开资源管理器有效防止电脑假死!
- 怎么清晰地理解、表达 IaaS 、 PaaS 、 SaaS ?