请写一个算法将顺序存储结构的线性表(a1...an)逆置为(an...a1)。
基本思路:
- 定义顺序表
- 初始化顺序表,给length、listsize赋值
- 创建顺序表,输入内容放到顺序表中
- 对顺序表元素进行逆置
- 打印顺序表,查看逆置结果
- 代码实现:
/*2023.11.9*/
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef int elemtype;
//定义顺序表的结构体
typedef struct
{
elemtype *data;
int length;
int listsize;
}SqList;
//初始化顺序表
void InitSqList(SqList* L,int a)
{
L->data = (elemtype*)malloc(a * sizeof(elemtype));
if (!L->data) {
printf("malloc error!\n"); exit(0);
}
//判断是不是分配成功
L->length = 0;
L->listsize = a;
}
//创建
int CreateList(SqList* L, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("请输入第%d个元素:\n", i + 1);
scanf_s("%d", &L->data[i]);
L->length = L->length + 1;
}
return 0;
}
//取值GetElem(结构体指针,取i的值,实参)
//int GetElem(SqList L, int i, elemtype* e)
//{
// if (L.length == 0 || i<1 || i>L.length)exit(0);
// *e = L.data[i - 1];
// return 1;
//}
/*void CreateList(SqList* L,int n)
{
for (int i = 0; i < n; i++)
{
printf("请输入第%d个元素:\n", i + 1);
scanf_s("%d", &L->data[i]);
L->length++;
}
}*/
//逆置顺序表内容
void TempList(SqList* L, int n)
{
if (n / 2 == 0)
{
int i;
elemtype temp;
for (i = 0; i < n / 2; i++)
{
temp = L->data[i];
L->data[i] = L->data[n - 1 - i];
L->data[n - 1 - i] = temp;
}
}
else {
int i;
elemtype temp;
for (i = 0; i < (n - 1) / 2; i++)
{
temp = L->data[i];
L->data[i] = L->data[n - 1 - i];
L->data[n - 1 - i] = temp;
}
}
}
//打印顺序表
void PrintList(SqList L)
{
if (!L.length)
{
printf("empty");
exit(0);
}
else
{
int i;
for (i = 0; i < L.length; i++)
printf("%d", L.data[i]);
}
}
//主函数
int main()
{
SqList L;
int a;
printf("请输入一个小于maxsize的数来决定顺序表的内容长度");
scanf_s("%d", &a);
InitSqList(&L,a);
CreateList(&L, a);
TempList(&L, a);
PrintList(L);
return 0;
}
运行结果