以順序表做存儲結構實現線性表,實現就地逆置算法,即在原表的存儲空間將線性表(a1, a2, ..., an)逆置爲(an, ... , a2, a1).算法
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 101 typedef struct { int r[MAXSIZE]; int length; } SqList; void inverseElement(SqList *L); void print(SqList L); int main(int argc, char *argv[]) { SqList list; int i; list.length = 9; for (i = 1; i <= list.length; i++) { list.r[i] = i * 3; } printf("初始順序表:\n"); print(list); printf("\n"); inverseElement(&list); printf("置換後的順序表:\n"); print(list); return 0; } /** * 逆置順序表 */ void inverseElement(SqList *L) { int middle = 0, k = -1, i; if (L->length % 2 == 0) { for (i = L->length / 2; i > 0; i--) { k += 2; middle = L->r[i]; L->r[i] = L->r[i + k]; L->r[i + k] = middle; } } else { k = 0; for (i = L->length / 2; i > 0; i--) { k += 2; middle = L->r[i]; L->r[i] = L->r[i + k]; L->r[i + k] = middle; } } } void print(SqList L) { for (int i = 1; i <= L.length; i++) { printf("%d\t", L.r[i]); } }