欢迎来到天天文库
浏览记录
ID:14276251
大小:116.50 KB
页数:14页
时间:2018-07-27
《pascal数据结构及其应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第七章 数据结构及其应用数字,字符,声音,图像,表格等信息,均可输入计算机中进行处理。在计算机科学中,象这种能输入到计算机中并被计算机程序处理的信息,都可称为数据。 数据的基本单位是数据元素。数据之间存在有线性与非线性两种基本的逻辑结构,同时在存储结构上还有顺序和链式之分。 数据结构则是研究数据元素的逻辑结构,存储结构和与之有关的各种基本操作的一门学科。作为一个程序设计者,应当掌握好数据结构的有关知识,在解题时针对问题的特点,选择适当的数据结构,并构造算法,编出优美高效的好程序。 本章将介绍一些线性的数据结构及其
2、基本操作。 第一节 线性表“线性表”是指由有限多个类型相同的数据元素组成的集合,它有以下的特点:(1)有唯一的头结点(即第一个数据元素)和尾结点(即最后一个数据元素);(2)除结点外,集合中的每个数据元素均只有一个前驱;(3)除尾结点外,集合中的每一个数据元素均只有一个后继。“线性表”是一种运用非常广范的数据结构。例一、某旅馆有100个房间,以1到100编号,第一个服务员来了,他将所有的房门都打开,第二个服务员再把所有编号是2的倍数的房门都关上,第三个服务员对编号是3的倍数的房门原来开的关上,原来关上的打开,此后的第四,五...服
3、务员均照此办理。问第100个服务员走进后,有哪几扇门是开着的。解:Pascal程序:Programlt7_1_1;usescrt;vardoor:array[1..100]ofboolean; 1到100号房门状态,false--关,true--开 i,j:integer;begin clrscr; fillchar(door,sizeof(door),true); 第一个服务员打开全部房门 fori:=2to100do i表示服务员号码 forj:=1to100divido door[i*j]:=n
4、otdoor[i*j]; 对房号为i的倍数的房门进行相反处理 write('Thecodeofopeningdooris : '); fori:=1to100do ifdoor[i]thenwrite(i,'');end.分析:(1)这里用door[1..100]来存储1到100号房门的开关状态,即是一种线性表,其中:door[1]可以看成是头结点,而door[100]是尾结点;同时由于数组在内存中是按顺序占有一片连续的内存空间,因此这种存储结构即是顺序存储结构。 (2)这里用布尔变量true和false分别表示开和关两
5、种状态,对某一房门进行相反处理时只要取反(not)即可,比如:若door[10]为false,notdoor[10]则为true。 例二、插入排序:在一个文本文件中存放的N个人的姓名,文本文件的格式为:第一行为N,以下第二至第N+1行分别是N个人的姓名(姓名不重复,由英文字母组成,长度不超过10),请编一个程序,将这些姓名按字典顺序排列。解:Pascal程序:Programlt7_1_2;usescrt;typepoint=^people; 定义结点类型 people=record name:string[10]
6、; name--数据域,存放姓名 next:point; next--指针域,存放后继结点的地址 end;varhead:point; n:integer; procedureinit; 初始化 begin new(head);head^.next:=nil; 定义头结点,初始链表为空 end; procedureinsert(p:point); 将P指向的结点插入以head开头的线性表中 varq1,q2:point; begin ifhead^.next=nilthenhead^.next:=p
7、 将P指向的结点插入空链表 else begin q1:=head;q2:=q1^.next; while(q2<>nil)and(q2^.name
8、:string; f:text; p:point; begin write('Filename:');readln(fn); assign(f,fn);reset(f); readln(f,n); fori:=1to
此文档下载收益归作者所有