0.简单介绍
本题包括基础线性表的实现,通过这两个题目的代码理解对于elem、length、maxsize等可以初步理解。
仅用来记录,高手跳过,入门者可以了解。
一.题一
顺序表的查找:实现在顺序表中查找一个已知的数,找到返回其位置,没有找开返回-1.请将查找函数补齐,并且正确运行。
输入如:
1 9 4 3 5 -1 3 //-1之前的数为顺序表中的数,-1后的数为待查的数
输出为:
4 //输出为3在表中的位置
二.代码实现
具体思路详见注释。
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 20
typedef int ElemType;
typedef struct Sqlist { //结构体定义
ElemType* elem;
int length;
int listsize;
}Sqlist;
void InitList(Sqlist& L, int maxsize)
{
ElemType a;
int i = 0;
if (maxsize == 0) maxsize = LIST_INIT_SIZE; //maxsize先定义为20,不够可以扩充
L.elem = (ElemType*)malloc(maxsize * sizeof(ElemType));
if (!L.elem) exit(1);
while (1) { //不等于-1时while执行输出
scanf("%d", &a);
if (a != -1)
L.elem[i++] = a;
else
break;
}
L.length = i; //实际长度
L.listsize = maxsize;
}
int LocateElem(Sqlist L, ElemType e) //定位传入的数据e在在线性表Sqlist位置
{
int i = 0;
while (i < L.length && L.elem[i] != e)
i++;
if (i < L.length) return i + 1; //数组0开始
else return -1;
}
int main()
{
Sqlist La;
ElemType e;
InitList(La, 100);
scanf("%d", &e);
printf("%d", LocateElem(La, e));
return 0;
}
三.题二
顺序表的反转:实现将顺序表的元素反转,请将程序补充完整并运行通过。如:
输入:
1 2 3 4 5 6 -1 //-1之前为表元素
输出:
6 5 4 3 2 1
四.代码实现
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 20;
typedef int ElemType;
typedef struct Sqlist {
ElemType* elem;
int length;
int listsize;
}Sqlist;
void InitList(Sqlist& L, int maxsize)
{
ElemType a;
int i = 0;
if (maxsize == 0) maxsize = LIST_INIT_SIZE;
L.elem = (ElemType*)malloc(maxsize * sizeof(ElemType));
if (!L.elem) exit(1);
while (1) {
scanf("%d", &a);
if (a != -1)
L.elem[i++] = a;
else
break;
}
L.length = i;
L.listsize = maxsize;
}
//***反转函数
void Reverse(Sqlist& L)
{
int i = 0;
for (; i < L.length / 2; i++) //L.elem[0]--L.elem[4],length == 5, i 0,1,2
{
ElemType temp = L.elem[i];
L.elem[i] = L.elem[L.length - 1 - i];
L.elem[L.length - 1 - i] = temp;
}
}
//***
int main()
{
Sqlist La;
ElemType e;
InitList(La, 100);
Reverse(La);
for (int i = 0; i < La.length; i++)
printf("%d ", La.elem[i]);
return 0;
}
1990

被折叠的 条评论
为什么被折叠?



