问题与代码
/*
*Copyright (c) 2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:shun.cpp
*作者:陈梦萍
*完成日期:2015年9月20日
*版本号:v1.0
*
*问题描述: 在已经创建线性表的基础上,在原程序的基础上增加:
增加求线性表的长度ListLength的函数并测试;
增加求线性表L中指定位置的某个数据元素GetElem的函数并测试;
增加查找元素LocateElem的函数并测试;
*输入描述:无
*程序输出:若干数据
*/
#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} SqList;
void CreateList(SqList *&l, int a[], int n);
void DispList(SqList *l);
bool ListEmpty(SqList *l);
void Listlength(SqList *l );
void GetElem(SqList *l,int i,ElemType &e);
void LocateElem(SqList *l,ElemType e);
int main()
{
SqList *sq;
ElemType x[6]= {5,4,9,3,7,2};
ElemType a;
CreateList(sq, x, 6);
DispList(sq);
Listlength(sq);
GetElem(sq,3,a);
GetElem(sq,13,a);
LocateElem(sq,7);
LocateElem(sq,6);
return 0;
}
void CreateList(SqList *&l, int a[],int n)
{
int i=0;
l=(SqList *)malloc(sizeof(SqList));
for(i=0; i<n; i++)
{
l->data[i]=a[i];
}
l->length=n;
}
void DispList(SqList*l)
{
int i=0;
if(ListEmpty(l))
return;
while(i<l->length)
{
printf("%d ",l->data[i]);
i++;
}
printf("\n");
}
bool ListEmpty(SqList *l)
{
if(l->length==0)
{
return 1;
}
else return 0;
}
void Listlength(SqList *l)
{
printf("表长度:%d\n",l->length);
}
void GetElem(SqList *l,int i,ElemType &e)
{
if (i<1 || i>l->length)
{
printf("元素超出范围!\n");
}
else
{
e=l->data[i-1];
printf("找到了元素值为:%d\n", e);
}
}
void LocateElem(SqList *l,ElemType e)
{
int i=0,lc;
while (i<l->length && l->data[i]!=e) i++;
if (i>=l->length)
{
printf("元素木有找到!\n");
}
else
{
lc=i+1;
printf("找到了,元素是第 %d 个\n", lc);
}
}
运行结果
知识点总结
尝试将main函数更简洁一些,将所有的判断都放在了自定义函数中。