数据结构(一)顺序表2:顺序表的就地逆置和顺序表中删除元素值
来源:互联网 发布:cc域名注册哪里便宜 编辑:程序博客网 时间:2024/05/17 07:03
问题一:
实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,…,an),逆置为(an,an-1,…,a1)。
1.顺序表的全部逆置
设一个临时变量,将顺序表逆置
<pre name="code" class="html">//顺序表的全部逆置void reverse_list(Sqlist &L){ //就地逆置,设一个临时变量,将顺序表逆置int i=0,j,k; for(j=L.length-1;i<=j;i++,j--) { k=L.data[i]; L.data[i]=L.data[j]; L.data[j]=k; }}
2..顺序表的全部逆置2
折半,将最前面和最后面的交换,之后前面的后移,后面的前移。
<pre name="code" class="html">//顺序表的全部逆置2void reverse_list (Sqlist &L){int i;int x;for(i=0;i<L.length/2;i++) // while(i<L.length) {..........i++;}{x=L.data[i];L.data[i]=L.data[L.length-i-i];L.data[L.length-1-i]=x;}}
</pre><h2>千变万化:</h2><h3>1.将一个顺序表中的第n~m个元素逆置</h3><p></p><p>通过一个临时变量,将顺序表逆置。</p><p></p><pre name="code" class="html">//将一个顺序表中的第n~m个元素逆置void reverse_date_list(Sqlist &L,int m,int n){int i=m,j=n;int k;while(i<j){k=L.data[i];L.data[i]=L.data[j];L.data[j]=k;i++;j--;}}
2.将线性表的前p个元素和后n-p个元素分别逆置
void reverse_date_list(Sqlist &L,int m,int n){int i=m,j=n;int k;while(i<j){k=L.data[i];L.data[i]=L.data[j];L.data[j]=k;i++;j--;}}void shift_reserve(Sqlist &L,,int n,int p){if(p>0 && p<n){reverse(L,0,n-p-1); //将前n-p个元素逆置reverse(L,n-p,n-1); //将后p个元素逆置}}
<h1>问题二:</h1><h2> 从一个顺序表中删除所有元素值为x的元素</h2><h3>1.删除元素值1</h3><p>遍历顺序表建立一个空表,只是新顺序表共享原顺序表的空间</p><div>算法:从头开始遍历,数值不同则放入空表,直至结束;表长为新表的长度</div>
void delete_elem_list(Sqlist &L,int x){int i,k=0; //k用来记录数值不同的数,将它放到空表中for(i=0;i<L.length;i++){if(L.data[i]!=x){L.data[k]=L.data[i];k++;}}L.length=k;}
2.删除元素值2
遍历顺序表,将数值不同的放到与其相邻的数值相同的前面算法:用一个新变量n记录数值相同的数出现的次数,当当前数和x不同时,将数值不同前移n个位置
void delete_elem_list(Sqlist &L,int x){int i=0,n=0; //n用来记录数值相同的数的个数,也就是数值不同的数的前移位置while (i<L.length){if(L.data[i]==x)n++;else L.data[i-k]=L.data[i];i++;}L.length-=k;}
千变万化:
删除线性表中元素值在x~y范围内的所有元素
1.遍历顺序表建立一个空表,只是新顺序表共享原顺序表的空间
算法:从头开始遍历,数值不在范围之内(数值不同)则放入空表,直至结束;表长为新表的长度
void delete_elem_list(Sqlist &L,int x,int y){int i,k=0; //k用来记录数值在范围之内(数值不同)的数,将它放到空表中for(i=0;i<L.length;i++){ if(L.data[i]<x || L.data[i]>y) //if(L.data[i]!=x){L.data[k]=L.data[i];k++;}}L.length=k;}
2.遍历顺序表,将数值不同的放到与其相邻的数值相同的前面
算法:用一个新变量n记录数值在范围内(数值相同)的数出现的次数,当当前数不在范围之内时(和x不同时),将数值不同前移n个位置
void delete_elem_list(Sqlist &L,int x,int y){int i=0,n=0; //n用来记录数值在范围之内(数值相同)的数的个数,也就是数值不在范围之内(数值不同)的数的前移位置while (i<L.length){ if(L.data[i]>=x && L.data[i]<=y) //if(L.data[i]==x)n++;else L.data[i-k]=L.data[i];i++;}L.length-=k;}
0 0
- 数据结构(一)顺序表2:顺序表的就地逆置和顺序表中删除元素值
- 顺序表创建和就地逆置
- 顺序表创建和就地逆置
- 顺序表的就地逆置
- 【应用】顺序表的就地逆置
- 顺序表的就地逆置
- 顺序表的就地逆置
- 顺序表的创建和就地逆置
- 顺序表的就地倒置
- 顺序表——顺序表的创建和就地逆置
- 实验二、2顺序表的就地逆置
- 【数据结构_顺序表_List_1038】顺序表中重复元素的删除
- 6-1 顺序表创建和就地逆置
- PTA 6-1 顺序表创建和就地逆置
- 数据结构顺序表删除重复元素
- 顺序表中静态顺序表的创建、插入和删除一个元素(源码分析)
- 顺序表中删除元素值为x的操作
- 数据结构(一):顺序表
- 【JZOJ4835】【GDOI2017模拟10.31】量化交易
- Winsock的同步异步模式
- 第九周 OJ总结<6>-第几天
- 技术学习
- 1、ReactNative详细的Windows系统环境下搭建
- 数据结构(一)顺序表2:顺序表的就地逆置和顺序表中删除元素值
- python 制作小蛇
- [LeetCode416]Partition Equal Subset Sum
- displaytag添加自定义跳转页数功能
- C/C++笔试必须熟悉掌握的头文件系列(七)——cctype/ctype.h
- C++笔记
- AOP源码解析(三)增强器的获取
- c语言学习总结之从关键字到循环结构
- python3报错解决办法:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multib