• 欢迎访问hellobiancheng.com 本站包含大量编程教程、编程工具软件以及学习资源!

学习数据结构与算法基础知识

编程经验 小小丁更努力 26次浏览 0个评论

学习数据结构与算法基础知识

基本概念:

  • 数据:数值型和非数值型。
  • 数据元素:是数据的基本单位。
  • 数据项:构成数据元素的最小单位。

数据>数据元素>数据项。

  • 数据对象:性质相同的数据元素的集合。
  • 数据结构:数据元素相互之间的关系。

逻辑结构:

  • 线性结构:有且仅有一个开始和一个终端结点,并且所有结点最多只有一个直接前趋和一个直接后继。
  • 非线性结构:一个结点可能有多个直接前趋和直接后继。

存储结构:

  • 顺序存储结构。
  • 链式存储结构(指针)。

抽象数据类型的表示与实现

例:关于圆的函数

ADT Complex{
数据对象:D={r1,r2|r1,r2都是实数}
数据关系:S={<r1,r2>|r1是实部,r2是虚部}
基本操作:
assign(&C,v1,v2)
初始条件:空的复数C已存在
操作结果:构造复数C,r1,r2分别被赋以参数v1,v2的值
add(Complex *C,Complex *A,Complex *B)
初始条件:复数A,B已存在
操作结果:复数A,B被相加,返回复数C
……
}ADT Complex

将上面的抽象类型定义转化为C语言形式

/*定义数据类型*/
typedef struct{
float realpart;//实部
float imagpart;//虚部
}Complex //定义复数抽象类型
/*函数声明*/
void assign(Complex *A,float real,float imag);//赋值
void add(Complex *C,Complex A,Complex B);//销毁
/*具体的构造函数*/
void assign(Complex *A,float real,float imag)
{
A->realpart=real;//实部赋值
A->imagpart=imag;//虚部赋值
}
void add(Complex *C,Complex A,Complex B
C->realpart=A.realpart+B.realpart;//实部相加
C->imagpart=A.imagpart+B.imagpart;//虚部相加
}

实例演示

例:求复数 8+6i 和 4+3i 的和以及他们的积?PS:除法运算规则太难

/*
运行结果:
add:12.0+9.0i
multiply:14.0+48.0i
*/
#include<stdio.h>
typedef struct
{
float realpart;//实部
float imagpart;//虚部
}Complex;
void assign(Complex* C, float real, float imag);
void add(Complex* C, Complex A, Complex B);
void multiply(Complex* C, Complex A, Complex B);
float Getreal(Complex C);
float Getimag(Complex C);
int main()
{
Complex C, C1, C2, D1, D2;
float Real = 0, Imag = 0;
assign(&C1, 8.0, 6.0);
assign(&C2, 4.0, 3.0);
add(&D1, C1, C2);
Real=Getreal(D1);
Imag=Getimag(D1);
printf("add:%.1lf+%.1lfi\n", Real, Imag);
multiply(&D2, C1, C2);
Real = Getreal(D2);
Imag = Getimag(D2);
printf("multiply:%.1lf+%.1lfi\n", Real, Imag);
return 0;
}
void assign(Complex* C, float real, float imag)
{
C->realpart = real;
C->imagpart = imag;
}
void add(Complex* C, Complex A, Complex B)
{
C->realpart = A.realpart + B.realpart;
C->imagpart = A.imagpart + B.imagpart;
}
void multiply(Complex* C, Complex A, Complex B)
{
C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;
C->imagpart = A.imagpart * B.realpart + A.realpart * B.imagpart;
}
float Getreal(Complex C)
{
return C.realpart;
}
float Getimag(Complex C)
{
return C.imagpart;
}

运行结果:

学习数据结构与算法基础知识

算法特性

有穷性、确定性、可行性、输入、输出;

C语言网提供「C语言、C++、算法竞赛」在线课程,全部由资深研发工程师或ACM金牌大佬亲授课,更科学、全面的课程体系,以在线视频+在线评测的学习模式学习,学练同步,拒绝理论派,真正学会编程!还有奖学金等增值福利等你!

你好编程, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明学习数据结构与算法基础知识
喜欢 (0)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)