2.3.3线性表的顺序表示-2

2017-04-14

2.设计一个高效的算法,将顺序表的所有元素逆置,要求算法的空间复杂度为O(1)。

 1 #include<iostream>
 2 #include<stdio.h>
 3 #define MaxSize 50//定义线性表的最大长度
 4 typedef int ElemType;
 5
 6 typedef struct {
 7     ElemType data[MaxSize];
 8     int length;
 9 }SqList;
10
11 void reverse(SqList &L)
12 {
13     ElemType temp;
14     for (int i = 0; i < L.length / 2; i++)
15     {
16         temp = L.data[i];
17         L.data[i] = L.data[L.length - 1 - i];
18         L.data[L.length - 1 - i] = temp;
19     }
20 }
21
22 int main()
23 {
24     SqList L;
25     //L.data = { 2,4,3,5,1,6,0,8,9,10 };
26     L.data[0] = 2;
27     L.data[1] = 4;
28     L.data[2] = 3;
29     L.data[3] = 5;
30     L.data[4] = 1;
31     L.data[5] = 6;
32     L.data[6] = 0;
33     L.data[7] = 8;
34     L.data[8] = 9;
35     L.data[9] = 10;
36     L.length = 10;
37
38     reverse(L);
39     for (int i = 0; i < L.length; i++)
40     {
41         printf("%d\n", L.data[i]);
42     }
43     //ElemType e = DeleteMin(L);
44     //printf("%d", e);
45
46     system("pause");
47     return 0;
48 }
时间: 2024-10-12 03:48:52

2.3.3线性表的顺序表示-2的相关文章

数据结构_线性表的顺序表示和链式表示

/********************************************************************************************************************/ 声明: (1)*.h文件是代码声明, *.cpp文件是代码实现; (2)一般头文件的内容有: ①类型声明; ②函数声明; ③枚举; ④常量; ⑤宏 (3)以下说明是为了方便代码文件的管理而设定的一些规则, 以后代码都会按照此规则编写: 1)Pubuse.h 是几

线性表之顺序表奇偶调整和单链表就地逆置

线性表之顺序表奇偶调整,就是指将顺序表的奇数与偶数位置互换,以最优方法解决,因为方法很多,比如,开辟一个新的顺序表分别存放奇偶数,也可以从头向后寻找奇偶数放置到尾部或头部,但这些都会增大时间与空间的消耗.最优法则是前后分别寻找奇偶不同类型数,满足前奇后偶(或前偶后期),交换两数位置,实现时间复杂度O(n),空间O(1)的方案. void AdjustSqlist(SeqList *L) { int i=0,j=L->last; int temp; while(i<j) { while(L-&g

线性表之顺序表C++实现

线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件#include<iostream> const int MaxSize = 100;//定义顺序表SeqList的模板类template<class DataType>class SeqList{public: //顺序表无参构造器(创建一个空的顺序表) SeqList(){ length = 0 } //顺序表有参构造器(创建一个长度为n的顺序表) SeqList(DataType array[], int

线性表的顺序表示

线性表了有如下几个特征: 1.集合中必存在唯一的一个"第一个元素": 2.集合中必存在唯一的一个"最后的元素": 3.除最后元素之外,其它数据元素均有唯一的"后继": 4.除第一元素之外,其它数据元素均有唯一的"前驱". 线性表的顺序表示指的是用物理上的一段连续的地址来存储数据元素. 如果第一个元素的在内存上的地址为a1,每个元素占用的空间是l,那么第n个元素的地址就是a1+(n-1) x l. 数组描述的线性表顺序结构表示:

线性表的顺序表示和实现

线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素. 假设线性表的每个元素需占用L个存储单元,并能所占的第一个单元的存储地址作为数据元素的存储位置.则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系: LOC(ai+1)=LOC(ai)+L 一般来说,线性表的第i个数据元素ai的存储位置为 LOC(ai)=LOC(a1)+(i-1)×L 式中LOC(a1)是线性表中第一个数据元素的存储位置,通常称做线性表的起始位置

线性表之顺序栈C++实现

线性表之顺序栈 栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,FILO:先进后出 一.顺序栈的头文件:SeqStack.h //顺序栈头文件#include<iostream>using namespace std;//设置顺序栈的大小const int StackSize = 10;template<class DataType>//定义顺序栈的模板类型class SeqStack{public: //无参构造器,初始化栈顶指针 SeqStack(){ top = -1; }

数据结构算法C语言实现(一)---2.3线性表的顺序表示和实现

注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实现,主要操作包括建表,插入元素,删除元素,查找元素,合并表等操作,根据书中伪代码编写了C语言,使用int类型进行了测试,需要注意的是查找元素时使用了函数指针,C语言初学者不易理解,可查阅相关书籍学习. 二.头文件 1 //head.h 2 /** 3 My Code 4 */ 5 #include

线性表的顺序实现

线性表的顺序表示和实现时间:2006/02/14测试环境:TC2.0 #include "stdio.h" #define TRUE 1 #define FALSE 0 #define List_Init_Size 30 #define List_Increment 10 typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; }Sqlist; /*初始化一个线性表*/ int I

C#线性表之顺序表

线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素: (2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是一个接一个的排列.因此,可以把线性表想象为一种数据元素序列的数据结构. 线性表的接口如下所示. public interface I

线性表之顺序表(C语言实现)

线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一个元素有前驱元素,单无后继元素. 可以抽象为如下表述: 元素1 元素2 元素3 元素4 元素5 元素6 然而同一种逻辑结构在内存中却可以有两种存储方式:1.在内存中连续存储的线性表-----顺序表(如数组)                  2.在内存中离散存储的线性表-----链表(如单链表,双链