实验内容(基础题必做,应用题任选)
1、基础题:
编写应用程序(填空),实现可以在顺序表中插入任意给定数据类型数据的功能(定义为ElemType抽象数据类型)。要求在主函数中定义顺序表并对该顺序表插入若干个整数类型的数据(正整数),对它们求和并输出。请把主函数设计为一个文件SqList.cpp,其余函数设计为另一个文件SqList.h。
请填空完成以下给出的源代码并调试通过。
(1) 文件SqList.h:
typedef struct List{ ElemType *elem; int length; }SqList; void InitList(SqList &L) { //构造一个空的顺序表 ………… } void ClearList(SqList &L) { //清空线性表,不销毁 ……………… } int ListLength (SqList L) { //求线性表长度 ……….. } bool ListInsert (SqList &L, int i , ElemType e) { //在线性表L中第i个数据元素之前插入新数据元素e ……. } ElemType GetElem(SqList L, int i) { //在线性表L中求序号为i的元素,该元素作为函数返回值 ………….. }
(2)文件SqList.cpp:
#include <stdio.h> #include <stdlib.h> typedef ElemType; //填空1 #define MAXSize 10 #include "SqList.h" void main(void) { SqList myList; int i=1, x, sum=0, n; InitList ( ); //填空2 scanf(“%d”, &x); while ( x!= -1 ) { if (ListInsert (myList, i, )==false) { //填空3 printf("错误! "); return ; } i++; scanf(“%d”, &x); } n = ListLength (myList); for (i=1; i<=n; i++) //求所有数据元素的和 { x=GetElem(myList, i); sum = + x; //填空4 } printf("%d ", sum); ClearList(myList); }
代码:
(1) 文件SqList.h:
typedef struct List{ ElemType *elem;//记录顺序表首地址 int length;//记录顺序表长度 }SqList; void initlist(SqList &L)//创建一个空的顺序表 { L.elem=new ElemType[maxsize]; if(!L.elem) exit(OVERFLOW); L.length=0; } bool list_insert(SqList &L,int k,int x)//在顺序表L第k个元素之前插入x { if(k<1||k>L.length+1) return false; if(L.length>=maxsize) return false; for(int i=L.length;i>=k;i--) { L.elem[i]=L.elem[i-1]; } L.elem[k-1]=x; ++L.length; return true; } int listlength(SqList &L)//求顺序表长度 { return L.length; } int get_elem(SqList &L,int i)//在顺序表L中求第i个元素,并返回该值 { return L.elem[i-1]; } void delete_list(SqList &L)//销毁顺序表 { L.length=0; delete[] L.elem; }
(2)文件SqList.cpp:
#include<cstdio> #include<cstring> #include<cstdlib> using namespace std; typedef int ElemType; #define maxsize 100 #define OVERFLOW -2 #include"SqList.h" int main() { printf("输入数据,以-1结束 "); SqList mylist; int i=1,x,sum=0,n; initlist(mylist); scanf("%d",&x); while(x!=-1) { if(list_insert(mylist,i,x)==false) { printf("错误 "); delete_list(mylist); return 0; } i++; scanf("%d",&x); } n=listlength(mylist); for(i=1;i<=n;i++) { x=get_elem(mylist,i); sum+=x; } printf("%d ",sum); delete_list(mylist); return 0; }