数据结构顺序存储结构 C++实现
- 格式:doc
- 大小:84.00 KB
- 文档页数:8
实验一C语言数据类型的使用[实验目的]复习C语言的使用方法,特别是指针、结构体的内容,同时也为以后的各个实验做准备。
[实验内容及要求]1.建立一个简单链表(静态链表),它由3个学生数据的结点组成,每个结点包括学号和成绩。
输出各结点中的数据。
(根据题目完善程序)#define NULL 0struct student{long num;float score;struct student *next;} stu;typedef struct student stu;main (){ stu a,b,c,*head,*p;a.num=99101;a.score=89.5;b.num=99103;b.score=90;c.num=99107;c.score=85;head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;do{printf(“%ld%5.1f\n”, );/*输出学号和成绩*/p=p->next;}while( );}输出:2.建立一个动态链表,它由3个学生数据的结点组成,每个结点包括学号和成绩。
输出各结点中的数据。
#define NULL 0#define LEN sizeof(struct student)struct student{long num;float score;struct student *next;};int n;struct student *creat(void) /*尾插法建立链表*/{struct student *head;struct student *p1, *p2;n=0;p1=p2=(struct student *)malloc(sizeof(struct student));scanf(“%ld,%f”,&p1->num,&p1->score);head=NULL;while(p1->num!=0){n=n+1;if (n= =1)head=p1;else p2->next=p1;p2=p2->next ;p1=(struct student *)malloc(LEN);scanf(“%ld,%f”,&p1->num,&p1->score);}p2->next=NULL;return( head );}void print(struct student *head){struct student *p;printf(“\nNow,These %d records are:\n”,n);p=head;if(head!=NULL)do{printf(“%ld%5.1f\n”,p->num,p->score);}while(p!=NULL);}main(){struct student *head;printf(“input records:\n”);head=creat();print(head);}输入:输出:[思考题]1.将上题链表中学生的成绩从低到高排列输出,要求每行一个,包括学号和成绩。
数据结构c语言版严蔚敏课后习题答案数据结构是计算机科学中的一个重要领域,它涉及到数据的组织、管理和存储方式,以便可以高效地访问和修改数据。
C语言作为一种广泛使用的编程语言,提供了丰富的数据结构实现方法。
严蔚敏教授编写的《数据结构(C语言版)》是许多计算机专业学生的必读教材。
以下是对该书课后习题的一些参考答案,供学习者参考。
第一章:绪论1. 数据结构的定义:数据结构是计算机中存储、组织数据的方式,它不仅包括数据元素的类型和关系,还包括数据操作的函数。
2. 数据结构的重要性:数据结构对于提高程序的效率至关重要。
合理的数据结构可以减少算法的时间复杂度和空间复杂度。
第二章:线性表1. 线性表的定义:线性表是由n个元素组成的有限序列,其中n称为线性表的长度。
2. 线性表的顺序存储结构:使用数组来存储线性表的元素,元素的存储关系是连续的。
3. 线性表的链式存储结构:使用链表来存储线性表的元素,每个元素包含数据部分和指向下一个元素的指针。
第三章:栈和队列1. 栈的定义:栈是一种特殊的线性表,只能在一端(栈顶)进行插入和删除操作。
2. 队列的定义:队列是一种特殊的线性表,允许在一端(队尾)进行插入操作,在另一端(队首)进行删除操作。
第四章:串1. 串的定义:串是由零个或多个字符组成的有限序列。
2. 串的存储结构:串可以采用顺序存储结构或链式存储结构。
第五章:数组和广义表1. 数组的定义:数组是由具有相同类型的多个元素组成的集合,这些元素按照索引顺序排列。
2. 广义表的定义:广义表是线性表的推广,其中的元素可以是数据也可以是子表。
第六章:树和二叉树1. 树的定义:树是由节点组成的,其中有一个特定的节点称为根,其余每个节点有且仅有一个父节点。
2. 二叉树的定义:二叉树是每个节点最多有两个子节点的树。
第七章:图1. 图的定义:图是由顶点和边组成的数据结构,可以表示复杂的关系。
2. 图的存储结构:图可以用邻接矩阵或邻接表来存储。
目录第1章绪论第2章线性表第3章栈和队列第4章串第5章数组第6章树第7章图第8章查找第9章排序第10章文件第1章绪论1.1数据结构的基本概念和术语1.2算法描述与分析1.3实习:常用算法实现及分析习题11.1数据结构的基本概念和术语1.1.1引例首先分析学籍档案类问题。
设一个班级有50个学生,这个班级的学籍表如表1.1所示。
表1.1学籍表序号学号姓名性别英语数学物理0120030301李明男8691800220030302马琳男7683855020030350刘薇薇女889390个记录又由750我们可以把表中每个学生的信息看成一个记录,表中的每个数据项组成。
该学籍表由个记录组成,记录之间是一种顺序关系。
这种表通常称为线性表,数据之间的逻辑结构称为线性结构,其主要操作有检索、查找、插入或删除等。
又如,对于学院的行政机构,可以把该学院的名称看成树根,把下设的若干个系看成它的树枝中间结点,把每个系分出的若干专业方向看成树叶,这样就形成一个树型结构,如图1.1所示。
树中的每个结点可以包含较多的信息,结点之间的关系不再是顺序的,而是分层、分叉的结构。
树型结构的主要操作有遍历、查找、插入或删除等。
最后分析交通问题。
如果把若干个城镇看成若干个顶点,再把城镇之间的道路看成边,它们可以构成一个网状的图(如图1.2所示),这种关系称为图型结构或网状结构。
在实际应用中,假设某地区有5个城镇,有一调查小组要对该地区每个城镇进行调查研究,并且每个城镇仅能调查一次,试问调查路线怎样设计才能以最高的效率完成此项工作?这是一个图论方面的问题。
交通图的存储和管理确实不属于单纯的数值计算问题,而是一种非数值的信息处理问题。
图1.2交通示意图1.1.2数据结构有关概念及术语一般来说,数据结构研究的是一类普通数据的表示及其相1968 D.E.Knuth 教授开创了数据结“数据结构”是计算机专业的一门专业基础课。
它为操作关的运算操作。
数据结构是一门主要研究怎样合理地组织数据,建立合适的数据结构,提高计算机执行程序所用的时间效率和空间效率的学科。
1 数据结构实验报告 实验目的 1. 熟练掌握线性表的顺序存储结构、链式存储结构,并分别实现线性表的基本操作。 2. 熟练掌握顺序存储结构中算法的实现。 3. 培养编程和上机调试能力。
实验内容 1. 建立含有若干元素的顺序表,并实现插入、删除、修改、查找等基本操作。并在屏幕上输出。 2. 建立含有若干元素的链式表,并实现插入、删除、修改、查找等基本操作。并在屏幕上输出。
实验步骤 打开VC6.0,新建文件。编写代码,运行、调试、输出结果。 实验代码 顺序表 #include #define elemtype int const int maxsize=1000; class sequenlist { protected: elemtype a[maxsize]; int len; public: void setnull() { len=0; } void input(int n) { for(int j=1;j<=n;j++) cin>>a[j]; len=n; } void print() 2
{ for(int i=1;i<=len;i++) cout } void change(elemtype x,elemtype y) { int j; for(j=1;j<=len;j++) if(a[j]==x) a[j]=y; } }; void main() { sequenlist L; elemtype x,y; int n,j; L.setnull(); cout<<"请输入表中元素个数:"; cin>>n; cout<<"请输入" L.change(x,y); L.print(); } 链式表: #include #define elemtype int class link { public: elemtype data; link *next; }; class linklist { protected: link *head; public: link *hcreat() { link *s,*p; elemtype i; cout<<"输入多个结点数值(用空格分隔),为0时算法结束"; cin>>i; p=new link; p->next=NULL; while(i) { s=new link; s->data=i; s->next=p->next; p->next=s; cin>>i; } return p; } void print (link *head) { link *p; p=head->next; while(p->next!=NULL) { cout"; p=p->next; } 5 coutnext; while((p!=NULL)&&(p->data!=x)) p=p->next; return p; } void deletel(link *head,elemtype x) { link *p,*q; q=head; p=head->next; while((p!=NULL)&&(p->data!=x)) { q=p; p=p->next; } if(p==NULL) cout<<"要删除的结点不存在"; else { q->next=p->next; delete(p); } } void insert(link *head,elemtype x,elemtype y) { link *p,*s; s=new link; s->data=y; if(head->next==NULL) { head->next=s; s->next=NULL; } p=Locate(head,x); if(p==NULL) cout<<"插入位置非法"; else { 6 s->next=p->next; p->next=s; } } void change(link *p,elemtype x,elemtype y) { link *q; q=p->next; while(q!=NULL) { if(q->data==x) q->data=y; q=q->next; } } int count(link *h) { link *p; int n=0; p=h->next; while(p!=NULL) { n++; p=p->next; } return n; } }; void main() { int n; elemtype x,y; link *p,*q; linklist a; p=a.hcreat(); a.print(p); cout<<"请输入要删除的元素"; cin>>y; a.deletel(p,y); a.print(p); cout<<"请输入插入位置的元素值(将待插元素插入它的后面)"; cin>>x; cout<<"请输入待插元素值"; cin>>y; 7 a.insert(p,x,y); a.print(p); cout<<"请输入要修改前、后的元素值"; cin>>x>>y; a.change(p,x,y); a.print(p); cout<<"请输入要查找的元素值"; cin>>x; q=a.Locate(p,x); if(q==NULL) cout 实验结果 顺序表