简单数据结构课程设计
A. 跪求数据结构课程设计(C语言版)代码,感激不尽
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。[1]
定义与声明
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。[1]
struct tag {
member-list
} variable-list ;
在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。以下为示例:[1]
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//同时又声明了结构体变量s1
//这个结构体并没有标明其标签
struct {
int a;
char b;
double c;
} s1;
//同上声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//结构体的标签被命名为SIMPLE,没有声明变量
struct SIMPLE{
int a;
char b;
double c;
};
//用SIMPLE标签的结构体,另外声明了变量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
//也可以用typedef创建新类型
typedef struct{
int a;
char b;
double c;
} Simple2;
//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;
在上面的声明中,第一个和第二声明被编译器当作两个完全不同的类型,即使他们的成员列表是一样的,如果令t3=&s1,则是非法的。[1]
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。[1]
//此结构体的声明包含了其他的结构体
struct COMPLEX{
char string[100];
struct SIMPLE a;
};
//此结构体的声明包含了指向自己类型的指针
struct NODE{
char string[100];
struct NODE *next_node;
};
如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明,如下所示:[1]
struct B;
//对结构体B进行不完整声明
//结构体A中包含指向结构体B的指针
struct A{
struct B *partner;
//other members;
};
//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
struct B{
struct A *partner;
//other members;};
结构体作用
结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成你想要的数据类型。以方便日后的使用。[1]
在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。[1]
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。[1]
结构体的大小与内存对齐
结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。[1]
规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。[1]
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。[1]
3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。
B. 数据结构课程设计 简单目录管理系统的设计与实现
给点劳务费呗。保质量完成。
C. 数据结构课程设计是什么
.需求分析
1.运行环境
硬件:计算机486/64M以上
操作系统: WIN9x 以上/WIN2000/WIN XP/WIN ME
相关软件:vistualC++
2.程序所实现的功能:
(1)建立并显示图的邻接表。
(2)深度优先遍历,显示遍历结果。
(3)对该图进行拓扑排序,显示排序结果。
(4)给出某一确定顶点到所有其它顶点的最短路径。
3.程序的输入,包含输入的数据格式和说明
(1)输入顶点数,及各顶点信息(数据格式为整形)
(2)输入边数,及权值(数据格式为整形)
4.程序的输出,程序输出的形式
(1)输出图的邻接表、深度优先遍历结果、拓扑排序结果。
(2)输入某一确定顶点到其它所有顶点的最短路径。
5.测试数据
二、设计说明
1、 算法设计的思想
建立图类,建立相关成员函数。最后在主函数中实现。具体成员函数的实现请参看源程序。
2、 主要的数据结构设计说明
图邻接矩阵、邻接表的建立。图的深度优先遍历、拓扑排序、顶点之间的最短路径。
3、 程序的主要模板template <class Type> class Graph
4、 程序的主要函数
Graph、link()、DFTraverse()、TopologicalOrder()、
TopologicalOrder()、GetVertexPos()、ShortestPath
三、上机结果及体会
1、 实际完成的情况说明
主要程序参考教材《数据结构——C++版》。
2、 程序的性能分析
可连续建图
3、 上机过程中出现的问题及其解决方案。
编译没有错误,但结果有问题。解决方案:虽然程序的编译通过,只能说明语法上没有问题,结果只所以不正确是因为算法上原因。
4、 程序中可以改进的地方说明
程序中的深度优先遍历,浪费空间较大,可以考虑用循环来做。但这样将付出代码长度度加长的代价。
5、 程序中可以扩充的功能及设计实现假想
实现假想:随用户的输入可以随时动态的显示图的生成。
6、 收获及体会
编写程序即是一件艰苦的工作,又是一件愉快的事情。最大的收获:编程时如果遇到看似简单但又无法解决的问题,很容易灰心丧气。此时切不可烦躁,一定要冷静的思考,认真的分析。要勇敢的面对问题,勇敢的接受问题,勇敢的处理问题,最后最勇敢的解决问题。
四、参考文献
数据结构(C++版) 叶核亚 主编 机械工业出版社
数据结构经典算法实现与习题解答 汪杰 编著 人民邮电出版社
数据结构课程设计 苏仕华 编著 机械工业出版社
数据结构程序设计题典 李春葆 编著 清华大学出版社
数据结构课程与题解(用C/C++描述) 胡圣荣 编著 北京大学出版社
[程序运行流程图]
char op //程序控制变量
D. 谁能帮我做一个简单的数据结构课程设计
不要把学习上的问题发上来,学习问题问老师去吧,肯定能给你讲,学习吧,不是离开大学就会失业的,到时候找不到工作你就哭去吧。
E. 简单的文本编辑器 数据结构课程设计
我给个思路吧:
1.把要统计的文章第次读入一行到数组中,以便统专计。
2.对这个数组从头属到尾循环,每次读入一个字符来分析,判断它是汉字还是字母、符号、数字。
3.写一个函数来统计串出现的次数,用strstr()函数。
4.删除某一子串时,可以把去掉串后的文本重新写入磁盘。
F. 数据结构课程设计
10.哈夫曼编\译码器我有啊
# define max 50
> struct a
> {
> int weight;
> int parent,lchild,rchild;
> };
> struct b
> {
> char cd[max];
> int start;
> };
> main()
> {
> struct a ht[2*max];
> struct b hcd[max],d;
> int i,j,k,n,c,s1,s2,m1,m2,f;
> printf("shu ru n:
");
> scanf("%d",&n);
> for(i=1;i<=n;i++)
> {
> printf("shu ru quan :");
> scanf("%d",&ht[i].weight);
> ht[i].parent=0;
> }
> for(;i<=2*n-1;i++)
> ht[i].parent=ht[i].lchild=ht[i].rchild=0;
> for(i=n+1;i<=2*n-1;i++)
> {
> m1=m2=30000;
> s1=s2=0;
> for(k=1;k<=i-1;k++)
> {
> if(ht[k].parent==0 && ht[k].weight<m1)
> {
> m2=m1;
> s2=s1;
> m1=ht[k].weight;
> s1=k;
> }
> else if(ht[k].parent==0 && ht[k].weight<m2)
> {
> m2=ht[k].weight;
> s2=k;
> }
> }
> ht[s1].parent=ht[s2].parent=i;
> ht[i].lchild=s1;
> ht[i].rchild=s2;
> ht[i].weight=ht[s1].weight+ht[s2].weight;
> }
> for(i=1;i<=n;i++)
> {
> d.start=n-1;
> c=i;
> f=ht[i].parent;
> while(f)
> {
> if(ht[f].lchild==c)d.cd[--d.start]='0';
> else d.cd[--d.start]='1';
> c=f;
> f=ht[f].parent;
> }
> hcd[i]=d;
> }
> printf("shu chu ha fu bian ma
");
> for(i=1;i<=n;i++)
> {
> printf("%d ",ht[i].weight);
> for(k=hcd[i].start;k<n-1;k++)
> printf("%c",hcd[i].cd[k]);
> printf("
");
> }
> }
>
>