数据结构是什么概念?请问数据结构(C语言版)自学要多长时间

本文目录
- 数据结构是什么概念
- 请问数据结构(C语言版)自学要多长时间
- 数据结构的入门课程得花费多少时间学习
- 模拟约瑟夫环(josephus)问题
- 用java语言的优秀数据结构书籍有哪些
- 数据结构 (c语言版)胡学纲 课后习题 答案谢谢了,大神帮忙啊
- 约瑟夫环问题 用C语言数据结构数组实现.
- 数据结构 约瑟夫环
- 数据仓库的数据结构,到底是星型、雪花模型、还是三范式三范式和星型、雪花是什么关系是不是包含他们
- 数据库的索引是如何实现的,主键索引和联合索引数据结构有什么区别
数据结构是什么概念
(一)什么是数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
(二)为什么要了解数据结构
程序的性能瓶颈往往都跟算法和数据结构有关系,简单的说,可以让你程序跑的更快
(三)数据结构的逻辑结构
逻辑结构是指数据对象中数据元素之间的相互关系,分为以下四种:
(1)集合结构
集合结构的里面的元素关系是孤立的
(2)线性结构
线性结构里面的元素关系:一对一
(3)树形结构
树形结构里面的元素关系:一对多
(4)图结构
图结构里面的元素关系:多对多
(三)数据结构的物理结构
物理结构:是指数据的逻辑结构在计算机中的存储形式。存储结构有两种:
(1)顺序存储结构:
顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
(2)链式存储结构
链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
(四)编程语言里面常见的数据结构
数组(Array)
堆栈(Stack)
队列(Queue)
链表(Linked List)
树(Tree)
图(Graph)
堆(Heap)
散列表(Hash)
总结:
本文介绍了数据结构相关的一些概念及知识,只有理解了数据结构,才能够帮助我们更好的去设计算法和程序。
摘抄
请问数据结构(C语言版)自学要多长时间
这要看你们怎么考了。有的学校考数据结构只考算法不考程序。主要让你分析算法的执行过程或者一个问题该怎么实现。如果仅仅是应付考试看看书就应该可以了。卷面上答题和上机运行差距还是很大的,卷面答题有那个思想一般就能得到一部分分数,而上机的话出现一点小问题结果不正确一般就是0分。如果自学理解能力好的话一个星期就能知道大概了(仅仅是算法不包括程序)。深入研究的话需要很长时间的。有其他问题的话可以继续追问。
数据结构的入门课程得花费多少时间学习
1个月!!!
使用清华大学出版社的c语言或者c++语言版的为佳。
其他的语言最好不要用。
在网上下载一些教学视频有助于提高你的学习速度!!
模拟约瑟夫环(josephus)问题
#include 《stdio.h》
#include 《stdlib.h》
typedef struct Lnode{
int data;
struct Lnode *next;} Lnode;
Lnode* create(int n)
{//建立共有n个结点的单循环链表h
int i;
Lnode *h,*p;//p为当前新生成结点的指针
Lnode *r=(Lnode *)malloc(sizeof(Lnode));//r为尾指针
r-》data=n;h=r;//h为头指针
for(i=n-1;i》0;i--)//头插法建立链表
{p=(Lnode *)malloc(sizeof(Lnode));
p-》data=i;
p-》next=h;
h=p;
}
r-》next=h ; //形成环
return h;
}
void jeseph(Lnode *p,int m)
{//从约瑟夫环中输出出列人的编号
Lnode *q;
int j=0;
printf(“出队序列为:\n“);
do{
j++;
if (j==m-1)
{
q=p-》next;
p-》next=q-》next;
printf(“%d “,q-》data);
j=0;free(q);
}
p=p-》next;
}while(p-》next!=p);
printf(“%d\n“,p-》data);
free(p);
}
void main()
{
Lnode *h;
int m,n;
printf(“\n请输入n和m的值:“);
scanf(“%d,%d“,&n,&m);
h=create(n) ;
jeseph(h,m);
}
执行程序结果为:
请输入n和m的值:12 , 4
出队序列为:4,8,12,5,10,3,11,7,6,9,2,1
执行程序结果为:
请输入n和m的值:7,20
用java语言的优秀数据结构书籍有哪些
数据结构和算法是和编程语言没有关系的,不管你学C,C++或者java,数据结构和算法都是一样的。数据结构市面上书非常多,而且基本都一样没有大区别的,拣个清华什么编的就成,算法最好的是《The introduction of algorithm》,不过市面上只有影印的,没有翻译的。南京大学的cs系自己有本内部自己翻译的,有同学的话去借吧。
数据结构 (c语言版)胡学纲 课后习题 答案谢谢了,大神帮忙啊
数据结构课程第一章部分习题解答 第一章 绪论 1-4.什么是抽象数据类型?试用C++的类声明定义“复数”的抽象数据类型。要求 (1) 在复数内部用浮点数定义它的实部和虚部。 (2) 实现3个构造函数:缺省的构造函数没有参数;第二个构造函数将双精度浮点数赋给复数的实部,虚部置为0;第三个构造函数将两个双精度浮点数分别赋给复数的实部和虚部。 (3) 定义获取和修改复数的实部和虚部,以及+、-、*、/等运算的成员函数。 (4) 定义重载的流函数来输出一个复数。 【解答】 抽象数据类型通常是指由用户定义,用以表示应用问题的数据模型。抽象数据类型由基本的数据类型构成,并包括一组相关的服务。 //在头文件complex.h中定义的复数类 #ifndef _complex_h_ #define _complex_h_ #include class comlex { public: complex ( ){ Re = Im = 0; } //不带参数的构造函数 complex ( double r ) { Re = r; Im = 0; } //只置实部的构造函数 complex ( double r, double i ) { Re = r; Im = i; } //分别置实部、虚部的构造函数 double getReal ( ) { return Re; } //取复数实部 double getImag ( ) { return Im; } //取复数虚部 void setReal ( double r ) { Re = r; } //修改复数实部 void setImag ( double i ) { Im = i; } //修改复数虚部 complex & operator = ( complex & ob) { Re = ob.Re; Im = ob.Im; } //复数赋值 complex & operator + ( complex & ob ); //重载函数:复数四则运算 complex & operator – ( complex & ob ); complex & operator * ( complex & ob ); complex & operator / ( complex & ob ); friend ostream & operator 《《 ( ostream & os, complex & c ); //友元函数:重载《《 private: double Re, Im; //复数的实部与虚部 }; #endif //复数类complex的相关服务的实现放在C++源文件complex.cpp中 #include #include #include “complex.h” complex & complex :: operator + ( complex & ob ) { //重载函数:复数加法运算。 complex * result = new complex ( Re + ob.Re, Im + ob.Im ); return *result; } complex & complex :: operator – ( complex & ob ) { //重载函数:复数减法运算 complex *result = new complex ( Re – ob.Re, Im – ob.Im ); return * result; } complex & complex :: operator * ( complex & ob ) { //重载函数:复数乘法运算 complex *result = new complex ( Re * ob.Re – Im * ob.Im, Im * ob.Re + Re * ob.Im ); return *result; } complex & complex :: operator / ( complex & ) { //重载函数:复数除法 查看更多答案》》
约瑟夫环问题 用C语言数据结构数组实现.
#include《iostream》
using namespace std;
struct Node//循环节点的定义
{
int number;//编号
Node *next;
};
Node *CreateList(Node *L,int &n,int &m);//建立约瑟夫环函数
void Joseph(Node *L,int n,int m);//输出每次出列号数函数
Node *DeleteList(Node **L,int i,Node *q);//寻找每次出列人的号数
int LengthList(Node *L);//计算环上所有人数函数
void main()//主函数
{
Node *L;
L=NULL;//初始化尾指针
int n, m;
cout《《“请输入人数N:“;
cin》》n;//环的长度
if(n《1){cout《《“请输入正整数!“;}//人数异常处理
else
{
cout《《“请输入所报数M:“;
cin》》m;
if(m《1){cout《《“请输入正整数!“;}//号数异常处理
else
{
L=CreateList(L,n,m);//重新给尾指针赋值
Joseph(L,n,m);
}
}
system(“pause“);
}
Node *CreateList(Node *L,int &n,int &m)//建立一个约瑟夫环(尾插法)
{
Node *q;
for(int i=1;i《=n;i++)
{
Node *p;
p=new Node;
p-》number=i;
p-》next=NULL;
if(i==1) L=q=p;//工作指针的初始化
else
{
q-》next=p;
q=q-》next;
}
}
q-》next=L;
if(L!=NULL){return(L);}//返回尾指针
else cout《《“尾指针异常!“《《endl;//尾指针异常处理
}
void Joseph(Node *L,int n,int m)//输出每次出列的人
{
int k;
cout《《“请输入第一个报数人:“;
cin》》k;
if(k《1||k》n){cout《《“请输入1-“《《n《《“之间的数“《《endl;}
else
{
cout《《“\n出列顺序:\n“;
for(int i=1;i《n;i++)
{
Node *q = new Node;
if(i==1) q=DeleteList(&L,k+m-1,q);//第一个出列人的号数
else q=DeleteList(&L,m,q);
cout《《“号数:“《《q-》number《《endl;
delete q;//释放出列人的存储空间
}
cout《《“最后一个出列号数是:“《《L-》number《《endl;;//输出最后出列人的号数
}
}
Node *DeleteList(Node **L,int i,Node *q) //寻找每次出列的人
{
if(i==1) i+=LengthList(*L);//顺序依次出列情况的处理方式
Node *p;
p=*L;
int j=0;
while(j《i-2) {p=p-》next;j++;}
q = p-》next;
p-》next=p-》next-》next;
*L = p-》next;
return(q);
}
int LengthList(Node *L)//计算环上的人数
{
if(L){cout《《“尾指针错误!“《《endl;}//异常处理
else
{
int i=1;
Node *p=L-》next;
while(p!=L)
{
i++;
p=p-》next;
}
return(i);
}
}
数据结构 约瑟夫环
你是问这个程序的作用(⊙_⊙)?是这样的:编号为1,2,3......,n的人按顺时针方向围坐一圈,每人持有一个密码,一开始任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自一开始报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人重新从1报数,如此下去,直到所有人出列。 程序用循环链表做的。
数据仓库的数据结构,到底是星型、雪花模型、还是三范式三范式和星型、雪花是什么关系是不是包含他们
1. 星型模式
星形模式(Star Schema)是最常用的维度建模方式。星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。星形模式的维度建模由一个事实表和一组维表成,且具有以下特点:a. 维表只和事实表关联,维表之间没有关联;b. 每个维表主键为单列,且该主键放置在事实表中,作为两边连接的外键;c. 以事实表为核心,维表围绕核心呈星形分布;
2. 雪花模式
雪花模式(Snowflake Schema)是对星形模式的扩展。雪花模式的维度表可以拥有其他维度表的,虽然这种模型相比星型更规范一些,但是由于这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模型要低。所以一般不是很常用
雪花模式
3.星座模式
星座模式是星型模式延伸而来,星型模式是基于一张事实表的,而星座模式是基于多张事实表的,而且共享维度信息。前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。在业务发展后期,绝大部分维度建模都采用的是星座模式。
星座模型
数据库的索引是如何实现的,主键索引和联合索引数据结构有什么区别
主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录.且不能为空;
索引是对数据库表中一列或多列的值进行排序的一种结构,只有当经常查询索引列中的数据时,才需要在表上创建索引,使用索引可快速访问数据库表中的特定信息。
索引占用磁盘空间,并且降低添加、删除和更新行的速度。当然索引也有好处就是查询速度快,它利还是大于弊的所以请慎重使用索引。
比如:一个学生表(t_stu
)有1000条数据,给它id列建个主键和索引,
你想查询id=1000;的这条信息,如果没有索引,它就一条一条的比对查找,系统运行1000次才找到,要是创建了索引,你查询id=1000的这条信息,系统只运行一次就找到了。

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00









