#define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
#include<malloc.h>
#include<stdlib.h>
# define OK 1
# define ERROR 0
#define LISTINITSIZE 100//线性表存储空间大小
typedef int Status;
typedef int ElemType;
typedef struct {
ElemType* data;//取值后储存空间地址
int length;//当前表长
int listsize;//当前分配的存储容量(单位为sizeof(ElemType))
}SqList ;
//函数声明
Status InitList_Sq(SqList* L);
Status GetElem(SqList L, int i, ElemType* e);
Status ListTraverse(SqList L, Status(*Visit)());
Status Visit(ElemType e);
void input(SqList* L);
int main()
{
int i = 1;
SqList L;
ElemType d;
input(&L);
printf("遍历线性表-->\n");
ListTraverse(L, Visit);
GetElem(L, 2, &d);
printf("\n第 2 个元素是 %d\n", d);
return 0;
}
//开辟100大小的空间
Status InitList_Sq(SqList* L) //链表初始化
{
L->data = (ElemType*)malloc(LISTINITSIZE * sizeof(ElemType));//为线性表开辟空间,大小为初始分配量*数据元素的大小,成功则返回指向首地址的指针
if (!L->data)
exit(-1);//如果elem指向空,则说明分配失败,程序退出,返回码为OVERFLOW
L->listsize = LISTINITSIZE;
return OK;
}
//开辟完空间后 写入数据
void input(SqList* L)
{
//初始化线性表
int i = 1;
ElemType x;
InitList_Sq(L);
printf("请输入一组数据,以0做为结束符:\n");
scanf("%d", &x);
while (x)
{
L->data[i - 1] = x;
i++;
scanf("%d", &x);
}
L->length = i - 1; //每输入一个当前内存减少一个
}
//从写入的数据中 取出某个数据
Status GetElem(SqList L, int i, ElemType* e)
{
if (i<0 || i>L.length)//判断位置i是否合法
{
return ERROR;
}
else
{
*e = L.data[i - 1];//将对应的元素传递给指针
return OK;
}
}
Status ListTraverse(SqList L, Status(*Visit)())
{
for (int i = 1;i <= L.length;i++) {
if (!Visit(L.data[i - 1])) return ERROR;
}
return OK;
}
Status Visit(ElemType d) //判断返回值
{
if (!d)
return ERROR;
printf("%d ", d);
return OK;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交