题目来源于王道2018数据结构考研复习指导线性表的综合练习
编译环境:VS2015
题目:设计一个高效的算法,将顺序表的所有元素逆置,要求算法的空间复杂度为O(1)
具体实现如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define initSize 50 4 5 typedef int ElementType; 6 7 typedef struct { 8 ElementType *data;//顺序表的元素 9 int length;//表长 10 int maxSize;//最大容量 11 }SeqList; 12 13 //初始化线性表 14 void InitList(SeqList &L) { 15 L.data = (ElementType*)malloc(sizeof(ElementType)*initSize); 16 L.length = 0;//置为空表 17 L.maxSize = initSize; 18 } 19 20 //创建顺序表 21 void CreateList(SeqList &L, int n) { 22 L.length = n; 23 for (int i = 0;i < n;i++) { 24 scanf_s("%d", &(L.data[i])); 25 } 26 } 27 28 //元素逆置 29 void Reverse(SeqList &L) { 30 int temp; 31 for (int i = 0;i < L.length/2;i++) { 32 temp = L.data[i]; 33 L.data[i] = L.data[L.length - i - 1]; 34 L.data[L.length - i - 1] = temp; 35 } 36 } 37 38 //显示 39 void ShowList(SeqList L) { 40 for (int i = 0;i < L.length;i++) { 41 printf_s("%3d",L.data[i]); 42 } 43 } 44 45 int main() { 46 SeqList L; 47 int length; 48 InitList(L); 49 printf_s("输入表的长度:"); 50 scanf_s("%d", &length); 51 printf_s(" 输入初始值:"); 52 CreateList(L, length); 53 Reverse(L); 54 printf_s(" 逆置的顺序表的元素如下:"); 55 ShowList(L); 56 printf_s(" "); 57 system("pause"); 58 return 0; 59 }
测试结果: