一,三元组Triplet的定义,表示与实现
思考点(PPT方法2)如何实现动态内存分布——malloc实现
这里我采用的是动态分配内存的方式,有一个代码很重要
T = (ElemType*)malloc(3 * sizeof(ElemType));//动态分配内存
这里使用的函数malloc包含在头文件头文件:#include <stdlib.h>中,函数用来动态地分配内存空间(如果你不了解动态内存分配,请查看:C语言动态内存分配及变量存储类别,其原型为:void* malloc (size_t size);
C++中使用(new)分配和(delete)撤销内存
【参数说明】size 为需要分配的内存空间的大小,以字节(Byte)计
【函数说明】malloc() 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。如果希望在分配内存的同时进行初始化,请使用 calloc()函数。
【返回值】分配成功返回指向该内存的地址,失败则返回 NULL。由于申请内存空间时可能有也可能没有,所以需要自行判断是否申请成功,再进行后续操作。
上面这条代码就表示给T分配了一个3个任意类型的长度的空间
代码实现
有了这个函数认知的基础下,我尝试着根据老师上课所讲的内容写出以下代码(我用的VS编译的,第一行是为了防止scanf函数无法正常运行)
判断大小是我采用了三元运算符 (关系表达式) ? 表达式1 : 表达式2;
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status; //Status是函数的类型,其值是函数结果状态代码
typedef int ElemType;
//----采用动态分配的顺序存储结构----
typedef ElemType* Triplet; //由InitTriplet分配3个元素存储空间
//----基本操作的函数原型说明----
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3);
//操作结果:构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2和v3的值。
Status DestroyTriplet(Triplet& T);
//操作结果:三元组T被销毁。
Status Get(Triplet T, int i, ElemType& e);
//初始条件:三元组T已存在,1<=i<=3。
//操作结果:用e返回T的i元的值
Status Put(Triplet& T, int i, ElemType e);
//初始条件:三元组T已存在,1<=i<=3。
//操作结果:改变T的第i元的值为e。
Status IsAscending(Triplet T);
//初始条件:三元组T已存在。
//操作结果:如果T的3个元素按升序排列,则返回1,否则返回0。
Status IsDescending(Triplet T);
//初始条件:三元组T已存在。
//操作结果:如果T的3个元素按降序排列,则返回1,否则返回0。
Status Max(Triplet T, ElemType& e);
//初始条件:三元组T已存在。
//操作结果:用e返回T的三个元素中的最大值。
Status Min(Triplet T, ElemType& e);
//初始条件:三元组T已存在。
//操作结果:用e返回T的三个元素中的最小值。
Status PrintTriplet(Triplet T);
//初始条件:三元组T已存在。
//操作结果:查看三元组每个元素。
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3)
{
T = (ElemType*)malloc(3 * sizeof(ElemType));//动态分配内存
T[0] = v1; T[1] = v2; T[2] = v3;
return OK;
}//InitTriplet
Status DestroyTriplet(Triplet& T)
{
free(T); T = NULL;
return OK;
}//DestroyTriplet
Status Get(Triplet T, int i, ElemType& e)
{
if (i < 1 || i>3)
return ERROR; //ERROR==0
e = T[i - 1];
return OK;
}
Status Put(Triplet& T, int i, ElemType e)
{
if (i < 1 || i>3)
return ERROR; //ERROR==0
T[i - 1] = e;
return OK;
}//Put
Status IsAscending(Triplet T)
{
return (T[0] <= T[1]) && (T[1] <= T[2]);
}//IsAscending
Status IsDescending(Triplet T)
{
return (T[0] >= T[1]) && (T[1] >= T[2]);
}//IsDescending
Status Max(Triplet T, ElemType& e)
{
//用e返回指向T的最大元素的值。
e = (T[0] > T[1] ? T[0] : T[1]) > (T[1] > T[2] ? T[1] : T[2]) ? (T[0] > T[1] ? T[0] : T[1]) : (T[1] > T[2] ? T[1] : T[2]);
return OK;
}//Max
Status Min(Triplet T, ElemType& e)
{
e = (T[0] < T[1] ? T[0] : T[1]) < (T[1] > T[2] ? T[1] : T[2]) ? (T[0] < T[1] ? T[0] : T[1]) : (T[1] < T[2] ? T[1] : T[2]);
return OK;
}//Min
Status PrintTriplet(Triplet T)
{
printf("抽象数据类型Triplet:");
for (int i = 0; i < 3; i++)
printf("%d ", T[i]);
printf("\n");
return OK;
}
int main()
{
Triplet T;
int a=0, b=0, c=0;
printf("请输入三个数:");
scanf("%d %d %d", &a, &b, &c);
InitTriplet(T, a, b, c);
int num1, num2, num3; //用来存放抽象数据类型数据元素
Get(T, 1, num1);
Get(T, 2, num2);
Get(T, 3, num3);
PrintTriplet(T);
Put(T, 2, 1);
PrintTriplet(T);
if (IsAscending(T))
printf("抽象数据类型Triplet由小到大排列!\n");
else if (IsDescending(T))
printf("抽象数据类型Triplet由大到小排列!\n");
else
printf("排列大小无规则\n");
int max, min;//记录最大值与最小值
Max(T, max);
Min(T, min);
printf("最大值为:%d,最小值为:%d", max, min);
return 0;
}
运行结果(三组结果)
二,变量,指针,引用做参数的程序和运行结果
问题:在C++环境中显示c++缺少类型说明符,假定为int;这一点不知道怎么改,在网上搜了一下,这里可以我找到了另一篇博客有详细介绍
变量做参数
#include <iostream>
using namespace std;
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int i = 3, j = 5;
swap(i, j);
cout << "i=" << i << endl << "j=" << j << endl;
getchar();
return 0;
}
结果
指针做参数
#include <iostream>
using namespace std;
int main()
{
void swap(int*, int*);
int i = 3, j = 5;
swap(&i, &j);
cout << "i=" << i << endl << "j=" << j << endl;
getchar();
return 0;
}
结果
引用做参数
#include <iostream>
using namespace std;
int main()
{
void swap(int & ,int&);
int i =3,j = 5;
swap(i,j);
cout<<"i="<<i<<endl<<"j="<<j<<endl;
getchar();
return 0;
}
void swap(int &a,int &b)
{
int temp;
temp = a;
a =b;
b= temp;
}
结果 :