国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

初識數(shù)據(jù)結(jié)構(gòu)之三元組

這篇具有很好參考價值的文章主要介紹了初識數(shù)據(jù)結(jié)構(gòu)之三元組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

三元組

一、什么是三元組

在初步了解了數(shù)據(jù)結(jié)構(gòu)的研究內(nèi)容后,做一個簡單的嘗試——三元組。

三元組是數(shù)據(jù)結(jié)構(gòu)里的一個基本概念。主要是用來存儲稀疏矩陣的一種壓縮方式,也叫三元組表。

三元組中存放三個值(x,y,z)分別代表矩陣的行、列、值。

二、三元組抽象數(shù)據(jù)類型描述

ADT Triplet {

數(shù)據(jù)對象:D = {e1,e2,e3 | e1,e2,e3屬于ElemType}

數(shù)據(jù)關(guān)系:R = {<e1,e2> | <e2,e3>}

基本操作:

initTriplet(&T,v1,v2,v3)

操作結(jié)果:構(gòu)造一個空的三元組T。

destroyTriplet(&T)

初始條件:三元組T已存在。

操作結(jié)果:銷毀三元組。

getElem(T,i,&e)

初始條件:三元組T已存在,且1<=i<=3。

操作結(jié)果:用e返回T中第i個元素的值。

putElem(&T,i,e)

初始條件:三元組T已存在,且1<=i<=3。

操作結(jié)果:將第i個元素置換為e。

printTriplet(Triplet &T)

初始條件:三元組T已存在。

操作結(jié)果:顯示三元組。

getMax(T,&e)

初始條件:三元組T已存在。

操作結(jié)果:用e返回三元組T中的最大值。

getMin(T,&e)

初始條件:三元組T已存在。

操作結(jié)果:用e返回三元組T中的最小值。

}

三、三元組操作實現(xiàn)

1、預(yù)定義

#define OK 1
#define ERROR 0

typedef int Status;
//三元組的類型先定義為float,可以隨時變換成別的類型
typedef float ElemType;
typedef ElemType *Triplet;

2、初始化

Status initTriplet(Triplet &T, ElemType v0, ElemType v1, ElemType v2) {
    //動態(tài)分配3個字節(jié)的內(nèi)存來存儲三元組中的三個值。
	T = (Triplet)malloc(3 * sizeof(v0, v1, v2));
	T[0] = v0;
	T[1] = v1;
	T[2] = v2;
	return OK;
}

在C語言中沒有動態(tài)數(shù)組類型,數(shù)組的長度是預(yù)先定義好的,而在實際的開發(fā)中,經(jīng)常無法確定空間大小的情況。因此需要根據(jù)實際動態(tài)分配和回收內(nèi)存空間。這里用到動態(tài)分配內(nèi)存函數(shù)malloc();

3、銷毀三元組

Status DestroyTriplet (Triplet &T) {
	free(T);
	return OK;
}

4、用e獲取T的第i個元素的值

Status getElem(Triplet T, int i, ElemType e) {
    //參數(shù)i輸入范圍為1~3。
	if (i < 1 || i > 3)
        //非法輸入返回ERROR。
		return ERROR;
	else
        //正常輸入,用e返回。
		e = T[i - 1];
	printf("%f", e);
	return OK;
}

5、置T的第i元的值為e

Status putElem(Triplet T, int i, ElemType &e) {
	if (i < 1 || i > 3)
		return ERROR;
	else
		T[i - 1] = e;
	printf("%f", e);
	return OK;
}

6、用e返回指向T的最大元素的值

ElemType getMax(Triplet T, ElemType &e) {
	if (T[0] > T[1])
		e = T[0];
	else
		e = T[1];
	if (T[2] > e)
		e = T[2];
	printf("%f", e);
	return e;
}

7、用e返回指向T的最小元素的值

ElemType getMin(Triplet T, ElemType &e) {
    //比較第一、二個元素,將較大值賦給e,用e與第三個元素比較,將較大值賦給e并返回。
	if (T[0] < T[1])
		e = T[0];
	else
		e = T[1];
	if (T[2] < e)
		e = T[2];
	printf("%f", e);
	return e;
}

8、顯示三元組

Status printTriplet (Triplet &T) {
	int i;
	for (i = 0; i < 3; i++) {
		printf("%f\n", T[i]);
	}
	printf("\n");
	return OK;
}

9、主函數(shù)

int main() {
	int n;
	int i;
	Triplet T;
	Status flag;s
	ElemType v0, v1, v2, e;
    //提示輸入
	printf("請進入三元組的三個值v0,v1,v2:\n");
	scanf("%f%f%f", &v0, &v1, &v2);
    //初始化
	flag = initTriplet(T, v0, v1, v2);
    //提示輸入
	printf("調(diào)用初始化函數(shù)后,flag=%d,T的三個值為%4.2f,%4.2f,%4.2f\n", flag, T[0], T[1], T[2]);
	printf("0 結(jié)束程序:\n");
	printf("1 取三元組的任意一個分量:\n");
	printf("2 置三元組的任意一個分量:\n");
	printf("3 求三元組的最大分量:\n");
	printf("4 求三元組的最小分量:\n");
	printf("5 顯示三元組:\n");
	printf("6 銷毀三元組:\n");
    //用一個循環(huán)反復(fù)實現(xiàn)各種功能。
	while (1) {
		printf("請輸入你想完成的功能編號:\n");
		scanf("%d", &n);
		if (n == 0) {
			break;
		} else {
			switch (n) {
				case 1:
					scanf("%d", &i);
					getElem (T, i, e);
					break;
				case 2:
					scanf("%d%f", &i, &e);
					putElem (T, i, e);
					break;
				case 3:
					getMax (T, e);
					break;
				case 4:
					getMin (T, e);
					break;
				case 5:
					printTriplet (T);
					break;
				case 6:
					DestroyTriplet (T);
					break;
				default:
					printf("沒有你想完成的功能\n");
					break;
			}
		}

	}
	return 0;
}

三元組操作實現(xiàn)完整代碼

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef float ElemType;
typedef ElemType *Triplet;

Status initTriplet(Triplet &T, ElemType v0, ElemType v1, ElemType v2) {
	T = (Triplet)malloc(3 * sizeof(v0, v1, v2));
	T[0] = v0;
	T[1] = v1;
	T[2] = v2;
	return OK;
}

Status getElem(Triplet T, int i, ElemType e) {
	if (i < 1 || i > 3)
		return ERROR;
	else
		e = T[i - 1];
	printf("%f", e);
	return OK;
}

Status putElem(Triplet T, int i, ElemType &e) {
	if (i < 1 || i > 3)
		return ERROR;
	else
		T[i - 1] = e;
	printf("%f", e);
	return OK;
}

ElemType getMax(Triplet T, ElemType &e) {
	if (T[0] > T[1])
		e = T[0];
	else
		e = T[1];
	if (T[2] > e)
		e = T[2];
	printf("%f", e);
	return e;
}

ElemType getMin(Triplet T, ElemType &e) {
	if (T[0] < T[1])
		e = T[0];
	else
		e = T[1];
	if (T[2] < e)
		e = T[2];
	printf("%f", e);
	return e;
}

Status printTriplet (Triplet &T) {
	int i;
	for (i = 0; i < 3; i++) {
		printf("%f\n", T[i]);
	}
	printf("\n");
	return OK;
}

Status DestroyTriplet (Triplet &T) {
	free(T);
	return OK;
}

int main() {
	int n;
	int i;
	Triplet T;
	Status flag;s
	ElemType v0, v1, v2, e;
	printf("請進入三元組的三個值v0,v1,v2:\n");
	scanf("%f%f%f", &v0, &v1, &v2);
	flag = initTriplet(T, v0, v1, v2);
	printf("調(diào)用初始化函數(shù)后,flag=%d,T的三個值為%4.2f,%4.2f,%4.2f\n", flag, T[0], T[1], T[2]);
	printf("0 結(jié)束程序:\n");
	printf("1 取三元組的任意一個分量:\n");
	printf("2 置三元組的任意一個分量:\n");
	printf("3 求三元組的最大分量:\n");
	printf("4 求三元組的最小分量:\n");
	printf("5 顯示三元組:\n");
	printf("6 銷毀三元組:\n");
	while (1) {
		printf("請輸入你想完成的功能編號:\n");
		scanf("%d", &n);
		if (n == 0) {
			break;
		} else {
			switch (n) {
				case 1:
					scanf("%d", &i);
					getElem (T, i, e);
					break;
				case 2:
					scanf("%d%f", &i, &e);
					putElem (T, i, e);
					break;
				case 3:
					getMax (T, e);
					break;
				case 4:
					getMin (T, e);
					break;
				case 5:
					printTriplet (T);
					break;
				case 6:
					DestroyTriplet (T);
					break;
				default:
					printf("沒有你想完成的功能\n");
					break;
			}
		}

	}
	return 0;
}

運行結(jié)果:

三元組,數(shù)據(jù)結(jié)構(gòu)(C語言),數(shù)據(jù)結(jié)構(gòu),算法文章來源地址http://www.zghlxwxcb.cn/news/detail-669131.html

到了這里,關(guān)于初識數(shù)據(jù)結(jié)構(gòu)之三元組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包