当前位置:首页 » 编程语言 » C语言抽象数据类型的例子
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言抽象数据类型的例子

发布时间: 2022-05-24 19:24:41

㈠ 试用c语言的结构类型定义表示复数的抽象数据类型

#include <stdio.h>

//结构体
typedef struct
{
double a;
double b;
} COMPLEX;
//加
COMPLEX add (COMPLEX a, COMPLEX b)
{
a.a += b.a;
a.b += b.b;
return a;
}

//减
COMPLEX subtract (COMPLEX a, COMPLEX b)
{
a.a -= b.a;
a.b -= b.b;
return a;
}
//乘
COMPLEX multiply (COMPLEX a, COMPLEX b)
{
COMPLEX c;
c.a = a.a*b.a - a.b*b.b;
c.b = a.a*b.b + a.b*b.a;
return c;
}
//除
COMPLEX divide (COMPLEX a, COMPLEX b) {
COMPLEX c;
double divisor = b.a*b.a + b.b*b.b;
if (divisor - 0 == 0)
exit (0);
c.a = (a.a*b.a + a.b*b.b) / divisor;
c.b = (a.b*b.a - a.a*b.b) / divisor;
return c;
}
然后读入数据,判断运算符号就行了。

㈡ 怎样写一个抽象数据类型!


template <class T> 这是定义类模版
因为C语言的函数参数传递需要指定确定类型才行。这样在编写程序过程就比较麻烦。比如
要写一个两个数相加的函数 int add(int a,int b),可以看到,这个函数只支持int 类型,float,double等类型就不能用这个函数了,只能再写一个 float addf(float a,float b)。这样代码的重用性能不好。
到了C++就有模版的出现了
就是定义一个模版,传入参数类型是不定时,就可以定义为模版。
你的代码就是了,template <class T> class T是任意的类型。
这样需要说明的是,模版的类型转换过程是发生在编译之前,也就是预编译,预编译跟预处理不同,预处理纯粹是编译前宏代码的替换,预编译是开始编译后,对一些模版类型进行调整生成中间代码,当然还有其它一些工作。
当编译成目标文件后,模版在定义变量赋了什么类型就是什么类型了

㈢ C语言设计实现抽象数据类型"有理数"基本操作包括有理数的加法,减法,乘法,除法,以及求有理数的分子,分

有理数即分数,
分数的数据类型是很简单的。
另外,求有理数的分子,分母的问题,因为给的有理数只能是有限小数,所以根本没有疑问。
但是如果改成:
求分子分母之和最小的,在一定误差范围内的分数,这个问题才有价值

比如:
0.3333333,如果误差为1e-4
那么1/3明显要比333333/10000000

下面给出一个实现(C++):
struct RatNum
{
int a,b;
static int GCD(int a,int b)
{
if(a<0)a=-a;
if(b<0)b=-b;
if(a==0)return b;
if(b==0)return a;
if(a<b)
{
int c=a;
a=b;
b=c;
}
unsigned int c;
while(c= a % b)
{
a = b ;
b = c;
}
return b;
}
explicit RatNum(int aa=0,int bb=1)
:a(aa),b(bb)
{
}
explicit RatNum(double num,double esp=0.00000001)
{
if(esp<0)esp=-esp;
for(b=1;;b++)
{
a=b*num+.5;
double k=a-b*num;
if(k<0)k=-k;
if(k<esp)break;
}
}
void norm()//约分
{
int c=GCD(a,b);
a/=c;
b/=c;
if(b<0)
{
a=-a;
b=-b;
}
}
RatNum operator/(const RatNum& f)const
{
RatNum d=*this;
d.a*=f.b;
d.b*=f.a;
return d;
}
RatNum operator-()const
{
RatNum ret=*this;
ret.a=-ret.a;
return ret;
}
void operator*=(const RatNum& f)
{
a*=f.a;
b*=f.b;
norm();
}
RatNum operator*(const RatNum& f)const
{
RatNum d=*this;
d*=f;
return d;
}
RatNum operator*(int q)const
{
RatNum d=*this;
d.a*=q;
return d;
}

void operator-=(const RatNum& f)
{
int bb=b;
a*=f.b;
b*=f.b;
a-=f.a*bb;
}
void operator+=(const RatNum& f)
{
int bb=b;
a*=f.b;
b*=f.b;
a+=f.a*bb;
}
void positive()
{
if (a<0)a=-a;
}
bool operator==(int n)
{
return a==n*b;
}
void operator=(int q)
{
a=q;
b=1;
}
};

㈣ C语言问题求助,一个抽象数据类型的例子

抽象是提取共性的过程。C的话可以使用结构体来存储公共域,比如:
struct
student
{
char
name[20];
unsigned
char
age;
unsigned
int
id;
...
};
这个结构体说明了学生这种抽象数据类型的成员都有那些

㈤ 抽象数据类型怎么用C语言实现 就是用一般的语言C程序写出来吗 到底怎么用C程序实现

你所谓的抽象数据类型到底是什么样子的??类似于泛型的话可以通过两个#实现,比如:

#define Link(node_type) struct node_type##Link{\
struct node_type##Link* prev;\
node_type value;\
struct node_type##Link* next;\
}

#define Declare_Link(node_type) Link(node_type)

这样你就可以通过:
Declare_Link(int);
声明一个节点值时int类型,节点类型是int_Link类型的新数据类型,如果你定义了链表的操作,那你可以只通过传入int类型,就可以声明并使用任意类型的链表了。

㈥ 关于C语言抽象数据类型不完整类型的问题

数据类型包括两个方面:1,这种类型所能代表的值的范围,或者说这种类型里面存的是什么东西;2,可以对这种类型做什么操作
所谓抽象数据类型,就是你在使用这个类型的时候,只要知道上面两点就可以了,你不用去管它里面是怎么实现的。如果该类型的具体实现改变了,也不会影响使用这个类型的已有的程序的代码。比如你在c语言里面经常用到int这个类型,但你从来没想过它是怎么来实现int与int之间的加法,乘法的,你也不需要知道。哪天编译器把int型的加法改了一下,跟你也没关系,你只要会使用就行了。

㈦ 从C语言的角度来解释什么是抽象数据类型

简单的说一下吧,所谓抽象数据类型ADT,是指
我们在逻辑上定义的
一种
数据类型。
如你所知道的,计算机内,无论是内存还是外存,都只是一组二进制的数位而已。
大多数时候,比如我们所熟知的
Char类型、Int类型等等,都是一组已经定义好的二进制数位。
所谓定义好,是指,在这一组数位中,如Char类型,8位,即一组8个二进制数位,我们如何标识和处理每一位,以及解读每一位所代表的意义。
你学过C,应该知道ASCII码,和二进制计数。
Char的这个数据类型的含义就是说
以二进制计数
算出对应的数值,
再以ASCII码为标准,解读出这8位二进制位中所表示的字母。
事实上,我想说的是,这就是一个基本的抽象数据类型了。
当然,ADT不仅仅是一组数位的定义,他还包括一组定义在这个结构上的一组操作。
struct这个方法,在后来的演变中,成为了C++和其他高等语言中的类(class)。
我知道,这样讲你肯定不是很明白,但关于这个东西,有一门课程叫做《数据结构》,中间详细叙述了所有有关
抽象数据类型的概念

其中,有一本
《数据结构C语言版》清华大学出版社
严蔚敏着
的教材,是所有计算机专业学生必修的一门课程。你可以看看。
祝好运!

㈧ 试用C语言的结构类型定义表示复数的抽象数据类型。

定义:
class complex
{
private:
double real; //复数的实部
double imag; //复数的虚部 复数表示为 real + imag i (如 2 + 3i)
public:
complex()
{
real=0;
image=0;
}
complex(double r, double i)
{
real=r;
imag=i;
}
void input(); //输入函数
void output(); //输出函数
void add(complex a);
void sub(complex a);
……………………………… //加、减、乘、除为成员函数 运算时直接调用就行
//建议您先实现加法和减法
}
祝您成功,加油!

㈨ 严蔚敏的数据结构(C语言版)绪论抽象数据类型Triplet的表示和实现

&T表示引用类型,函数调用时值传递, Status DestroyTeiplet(Triplet &T) 忠 三元组T整个进行了改变,被销毁了,所以用了&T,进行了引用传递,功能类似于指针传递,不过书写类型可以类似于值传递;Status Get(Triplet T,int i,ElemType &e) 仅仅是查询三元组,没有改变三元组的内容,所以用了直接调用值传递;建议去看下关于函数调用的 引用传递 值传递 和指针传递的 各种参数传递形式