数据结构严蔚敏例1-6源代码

本文档展示了如何使用C语言定义和操作一个三元组数据结构,包括初始化、销毁、获取和设置元素值、判断元素升序和降序以及找到最大和最小值的功能。通过示例代码,演示了这些操作的使用方法。

#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;
typedef int ElemType;
typedef ElemType *Triplet;
//基本操作的函数原型说明
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的三个元素按升序排列,则返回1,否则返回0
Status IsDescending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按蒋旭排列,则返回1,否则返回0
Status Max(Triplet T, ElemType& e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最大值
Status Min(Triplet T, ElemType& e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最小值

//基本操作的实现
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3)
{
	//构造三元组T,依次置T的三个元素的初值为v1,v2,v3
	T = (ElemType*)malloc(3 * sizeof(ElemType));
	if (!T)exit(OVERFLOW);//分配空间失败
	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)
{
	//1 <= i <= 3,用e返回T的第i个元的值
	if (i < 1 || i>3)
		return ERROR;
	e = T[i - 1];
	return OK;
}//Get

Status Put(Triplet& T, int i, ElemType e)
{
	//1 <= i <= 3,置T的第i元的值为e
	if (i < 1 || i>3)
		return ERROR;
	T[i - 1] = e;
	return OK;
}//Put

Status IsAscending(Triplet T)
{
	//如果T的三个元素按升序排序,则返回1,否则返回0
	return (T[0] <= T[1]) && (T[1] <= T[2]);
}//IsAscending

Status IsDescending(Triplet T)
{
	// 如果T的三个元素按降序排序,则返回1,否则返回0
	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[2]) ? T[0] : T[2]) : ((T[1] >= T[2] ? T[1] : T[2]));
	return OK;
}//Max

Status Min(Triplet T, ElemType& e)
{
	//用e返回指向T的最小元素的值
	e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : ((T[1] <= T[2] ? T[1] : T[2]));
	return OK;
}//Min


int main()
{   
	//步骤一 
	Triplet a;
	ElemType a1,a2,a3;
	printf("请输入三个元素的值:\n");
	scanf("%d %d %d",&a1,&a2,&a3);
	printf("%d 如果为1表示初始化执行成功\n",InitTriplet(a,a1,a2,a3));
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	//步骤二
	ElemType b;
	printf("%d 如果为1表示取值执行成功\n",
	Get(a,2,b));
	printf("第二个值为 %d\n",b);
	//步骤三 
	b=5;
	printf("%d 如果为1表示更改值执行成功\n",Put(a,2,b));
	printf("第二个值改为 %d\n",a[2-1]);
	//步骤四 
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照升序排序,不升序排序输出0\n",IsAscending(a)); 
	InitTriplet(a,a1,a2,a3); 
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照升序排序,不升序排序输出0\n",IsAscending(a));
	//步骤五
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照降序排序,不降序排序输出0\n",IsDescending(a)); 
	InitTriplet(a,a3,a2,a1); 
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照降序排序,不降序排序输出0\n",IsDescending(a));
	//步骤六
	printf("%d 如果为1表示取得最大值\n",Max(a,b));
	printf("输出最大值 %d\n",b);
    //步骤七
	printf("%d 如果为1表示取得最小值\n",Min(a,b));
	printf("输出最小值 %d\n",b);
	//步骤八
	printf("%d 如果为1表示销毁本个三元组数据\n",DestroyTriplet(a));  
	return 0;
 } 

 运行结果

 

1.1 数组和字符串 2 1.1.1 一维数组的倒置 2 范1-1 一维数组的倒置 2 ∷相关函数:fun函数 1.1.2 一维数组应用 3 范1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 范1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范1-5 魔方阵 9 1.1.6 三维数组的表示 14 范1-6 三维数组的表示 14 ∷相关函数:InitArray函数 1.1.7 多项式的数组表示 17 范1-7 多项式数组的表示 17 1.1.8 查找矩阵的马鞍点 19 范1-8 查找矩阵的马鞍点 19 ∷相关函数:Get_Saddle函数 1.1.9 对角矩阵建立 211-9 对角矩阵建立 21 ∷相关函数:Store函数 1.1.10 三对角矩阵的建立 22 范1-10 三对角矩阵的建立 22 ∷相关函数:Store函数 1.1.11 三角矩阵建立 24 范1-11 三角矩阵建立 24 ∷相关函数:Store函数 1.1.12 对称矩阵的建立 25 范1-12 对称矩阵的建立 25 ∷相关函数:store函数 1.1.13 字符串长度的计算 28 范1-13 字符串长度的计算 28 ∷相关函数:strlen函数 1.1.14 字符串的复制 29 范1-14 字符串的复制 29 ∷相关函数:strcpy函数 1.1.15 字符串的替换 311-15 字符串的替换 31 ∷相关函数:strrep函数 1.1.16 字符串的删除 33 范1-16 字符串的删除 33 ∷相关函数:strdel函数 1.1.17 字符串的比较 35 范1-17 字符串的比较 35 ∷相关函数:strcmp函数 1.1.18 字符串的抽取 361-18 字符串的抽取 36 ∷相关函数:substr函数 1.1.19 字符串的分割 38 范1-19 字符串的分割 38 ∷相关函数:partition函数 1.1.20 字符串的插入 40 范1-20 字符串的插入 40 ∷相关函数:insert函数 1.1.21 字符串的匹配 42 范1-21 字符串的匹配 42 ∷相关函数:nfind函数 1.1.22 字符串的合并 43 范1-22 字符串的合并 43 ∷相关函数:catstr函数 1.1.23 文本编辑 45 范1-23 文本编辑 45 ∷相关函数:StrAssign函数 1.2 栈和队列 54 1.2.1 用数组仿真堆栈 54 范1-24 用数组仿真堆栈 54 ∷相关函数:push函数 pop函数 1.2.2 用链表仿真堆栈 57 范1-25 用链表仿真堆栈 57 ∷相关函数:push函数 pop函数 1.2.3 顺序栈公用 59 范1-26 顺序栈公用 59 ∷相关函数:push函数 pop函数 1.2.4 进制转换问题 611-27 进制转换问题 61 ∷相关函数:MultiBaseOutput函数 1.2.5 顺序队列操作 64 范1-28 顺序队列操作 64 ∷相关函数:push函数 pop函数 1.2.6 循环队列 661-29 循环队列 66 ∷相关函数:EnQueue函数 DeQueue函数 1.2.7 链队列的入队、出队 69 范1-30 链队列入队、出队 69 ∷相关函数:push函数 pop函数 1.2.8 舞伴问题 711-31 舞伴问题 71 ∷相关函数:EnQueue函数 DeQueue函数 DancePartner函数 1.3 链表 75 1.3.1 头插法建立单链表 75 范1-32 头插法建立单链表 75 ∷相关函数:createlist函数 1.3.2 限制链表长度建立单链表 77 范1-33 限制链表长度建立长单链表 77 ∷相关函数:createlist函数 1.3.3 尾插法建立单链表 79 范1-34 尾插法建立单链表 79 ∷相关函数:createlist函数 1.3.4 按序号查找单链表 80 范1-35 按序号查找单链表 80 ∷相关函数:getnode函数 1.3.5 按值查找单链表 82 范1-36 按值查找单链表 82 ∷相关函数:locatenode函数 1.3.6 链表的插入 84 范1-37 链表的插入 84 ∷相关函数:insertnode函数 1.3.7 链表的删除 861-38 链表的删除 86 ∷相关函数:deletelist函数 1.3.8 归并两个单链表 88 范1-39 归并两个单链表 88 ∷相关函数:concatenate函数 1.3.9 动态堆栈 90 范1-40
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值