学习数据结构的时候靠着实现上机题目入了门,现在分享下我的菜鸟成长之路:
一、线性表实现之顺序表:采用动态数组
题目有如下要求:
(1)编写应用程序(填空),实现可以在顺序表中插入任意给定数据类型数据的功能。要求在主函数中定义顺序表并对该顺序表插入若干个整数类型的数据(正整数),对它们求和并输出。请使用动态内存分配的方式申请数组空间并编写函数bool DeleteElem(SeqList &L, int min, int max) 实现从顺序表中删除其值在给定值min和max之间(min < max)的所有元素。
完整代码如下:
#include<stdio.h>
#include<process.h>
#include<malloc.h>
#define maxsize 10
#define increment 10
typedef int elemtype;
typedef struct
{
elemtype *elem;
int length;
int listsize;
}sqlist;
void InitList(sqlist &L) //初始化线性表
{
L.elem=(elemtype*)malloc(maxsize*sizeof(elemtype));
if(!L.elem) exit(0);
L.length=0;
L.listsize=maxsize;
}
void ClearList(sqlist &L) //清除线性表
{
L.length=0;
}
int LengthList(sqlist &L)//求线性表长度
{
return L.length;
}
bool insertlist(sqlist &L,elemtype item, int pos)//按给定条件pos向线性表插入一个元素
{
elemtype *p;
if(pos<1||pos>L.length+1) return 0;//error:L.length
if(L.length>=L.listsize)
{
L.elem=(elemtype*)realloc(L.elem,(L.listsize+increment)*sizeof(elemtype));
if(!L.elem) return 0;
L.listsize+=increment;
}
p=L.elem+pos-1;
for(int i=L.length-1;i>=pos-1;i--)
{
L.elem[i+1]=L.elem[i];
}
*p=item;
L.length++;
return 1;
}
elemtype GetList(sqlist *L, int pos) //在线性表L中求序号为pos的元素,该元素作为函数值返回
{
// if(pos<1||pos>=L.length+1)exit(0);
//else
return L->elem[pos-1];
}
bool DeleteElem(sqlist &L, int min, int max) //在顺序表中删除大小在min~max的所有元素
{
if(L.length<1)exit(0);
int i=0;
while(i<L.length)
{
if(L.elem[i]<=max&&L.elem[i]>=min)
{
for(int j=i+1;j<L.length;j++)
{
L.elem[j-1]=L.elem[j];
}
L.length=L.length-1;
}
else i++;
}
return 1;
}
int main( )
{
sqlist myList;
int i=1, x, sum=0, n;
InitList(myList);
printf("请输入10个元素(-1结束)\n");
scanf("%d",&x);
while ( x!= -1 )
{
if ( insertlist(myList,x,i)==0)
{
printf("错误!\n");
return 0; //............
}
i++;
scanf("%d",&x);
}
n = LengthList ( myList);
printf("表长为:%d\n",n);
printf("第3个元素为:%d\n",GetList(&myList,3));
printf("输出表为:\n");
for (i=1; i<=n; i++)
{
x=GetList(&myList, i);
printf("%d\n",x);
sum = x + sum;
}
printf("m=%d\n",GetList(&myList,n));
printf("\n表元素之和为:\n");
printf("sum=%d\n",sum);
printf("删除小于等于7大于等于3的数后\n");
DeleteElem(myList,3,7);//为了简化操作,自定义min为3,max为7
int m= LengthList ( myList);
printf("表长为:%d\n",m);
printf("顺序表为:\n");
for (int j=1; j<=m; j++)
{
x=GetList(&myList, j);
printf("%d\n",x);
}
ClearList(myList);
system ("pause");
}
运行如下图: