首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Pascal语言中的链表

Pascal语言中的链表
EN

Stack Overflow用户
提问于 2010-10-09 08:44:38
回答 2查看 2.6K关注 0票数 2

我正在寻找一个好的和简单的实现在Pascal的链表。因为我是Pascal初学者,它会对我有很大的帮助,作为学习材料。

谢谢你的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-09 08:58:27

在我以前的邮件中,我发现了一个我们已经完成的实现。代码是“法语的”,所以我不会去碰它,以免忘记某个函数会破坏编译:-)

首先,我们有一个"element“类型,让我们可以轻松地更改我们想要存储在列表中的内容:

代码语言:javascript
运行
AI代码解释
复制
unit U_ELEMENT;

interface

{ We store integers }
type
    T_ELEMENT = Integer;

{ Reads an element }
procedure lireElement(out res:INTEGER; out code:WORD; out ch:STRING);
{ Write and element }
procedure ecrireElement(const t:T_ELEMENT);

implementation

procedure lireElement(out res:T_ELEMENT; out code:WORD; out ch:STRING);
begin
    write('> ');readln(ch);
    val(ch,res,code);
end;

procedure ecrireElement(const t:T_ELEMENT);
begin
    write(t);
end;

end.

然后是实际的list模块,该模块用于在列表的开头添加元素:

代码语言:javascript
运行
AI代码解释
复制
unit U_LISTE;

interface

uses U_ELEMENT;

const LISTEVIDE = NIL;
type
    T_LISTE = ^T_CELLULE; 
    T_CELLULE = record
        info: T_ELEMENT; { The stored information }
        suivant: T_LISTE; { Pointer to the next element }
    end;
{ Add an heading element }
function ajouteEnTete(e:T_ELEMENT;l:T_LISTE):T_LISTE;
{ returns the head of the list }
function tete(l:T_LISTE):T_ELEMENT;
{ returns the list, without the head }
function reste(l:T_LISTE):T_LISTE;
{ List empty? }
function estListeVide(l:T_LISTE):BOOLEAN;
{ Modify the header element }
procedure modifierTete(var l:T_LISTE;const e:T_ELEMENT);
{ Modify the list after the head }
procedure modifierReste(var l1:T_LISTE; const l2:T_LISTE);

implementation

function ajouteEnTete(e:T_ELEMENT;l:T_LISTE):T_LISTE;
var l1:T_LISTE;
begin
    new(l1);
    l1^.info := e;
    l1^.suivant := l;
    ajouteEnTete := l1;
end;

function tete(l:T_LISTE):T_ELEMENT;
begin
    tete := l^.info;
end;

function reste(l:T_LISTE):T_LISTE;
begin
    reste := l^.suivant;
end;

function estListeVide(l:T_LISTE):BOOLEAN;
begin
    estListeVide := l=NIL;
end;

procedure modifierTete(var l:T_LISTE;const e:T_ELEMENT);
begin
    l^.info := e;
end;

procedure modifierReste(var l1:T_LISTE; const l2:T_LISTE);
begin
    l1^.suivant := l2;
end;

end.

和一个小的测试程序:

代码语言:javascript
运行
AI代码解释
复制
program testeliste;

uses U_ELEMENT,U_LISTE;

procedure afficherListe(const l:T_LISTE);
var l1: T_LISTE;
    vide: BOOLEAN;
begin
    write('(');
    l1 := l;
    vide := estListeVide(l1);
    while not(vide) do
    begin
        ecrireElement(tete(l1));
        l1 := reste(l1);
        vide := estListeVide(l1);
        if not(vide) then
            write(',');
    end;
    write(')');
    writeln;
end;

var res:T_ELEMENT;
    code:WORD;
    ch:STRING;
    i:INTEGER;
    l:T_LISTE;

Begin
    l:=LISTEVIDE;
    for i:=0 to 9 do
    begin
        lireElement(res,code,ch);
        l := ajouteEnTete(res,l);
    end;
    afficherListe(l);

    afficherListe(reste(l));
    afficherListe(reste(reste(reste(l))));
    afficherListe(ajouteEnTete(tete(l),l));

End.

正如我所说的,这是我刚开始学习CS时编写的一个旧的(非常旧的)程序,所以它可能不适合:-),但我认为它对语法和全局思想有帮助。

票数 4
EN

Stack Overflow用户

发布于 2010-10-09 08:46:18

好文章:http://www.learn-programming.za.net/programming_pascal_learn14.html

网站似乎停机了。在这里你可以找到-> Archived Version

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3896629

复制
相关文章
从Ndom语浅谈语言中的进制
这题粗看复杂,其实不然。首先不难看出,abo、an并不是数字,所以不是加法就是乘法。因为abo出现的十分多,所以我们可以简单地假设abo是加法。接下来需要确定进制。我们知道1-10的乘方之间,出现了三个单独的词。不难得出,肯定1个是1,一个是基数的平方。除了这两个,只剩一个单独的词,那么这个词只可能是2^2=4。由此我们可以确定,Ndom语言的数字表达的基数肯定大于4且小于9。因为nif为很多长词的开头,所以nif应该是基数的平方。在题2的等式我们发现meregh乘上sas结尾的词,结果竟然还是以meregh尾!所以很明显sas就是1,于是thonith就是4。接着找,就找到了余下几个小于基数的词(于abo、an之后的较小):ithin、meregh、thef(可能是2、3、5)。剩下的mer、nif、tondor估计就是基数的倍数了,通过观察nif abo tondor abo mer abo thonith,发现nif>tondor>mer。按照推论,mer abo ithin应该是第三小的数字——9,那么mer应该就是基数了。ithin肯定不是1、4,所以排除5、8进制可能。那么就只剩下6、7进制两种可能了。分析得mer an thef abo thonith是第4小的,即16。mer*thef+4=16⇒mer*thef=12。所以只有一种可能:Ndom语言的数字是6进制。所以mer为6,thef为2,nif是mer的平方即36,ithin是9-6=3。排除法得,meregh是5。最后还有一个tondor,通过推断tondor abo mer abo sas≥6*2+6+1=19最近的平方数是25,可以判断tondor是18。至此,我们已经推断完成所有的词。剩下就是一些小小的规则,比如表示72,并不是nif an thef,而是直接nif thef。还有就是大的数字一定会在前。所以我们就能写出:58=36+18+4也就是nif abo tondor abo thonith,而87=36*2+6*2+3即nif thef abo mer an thef abo ithin。参考答案:
KAAAsS
2022/01/13
11.1K0
从Ndom语浅谈语言中的进制
C语言链表详解_c语言中链表的使用
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的。链表中每个节点都分为两部分,一个数据域,一个是指针域。说到这里你应该就明白了,链表就如同车链子一样,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
全栈程序员站长
2022/11/01
4.3K0
又见Pascal
今天在逛一个上古论坛(Delphi盒子)的时候看了下下面的友链,发现一个星五博客 ,点进去看了一下,第一篇文章是基于pascal的网站开发。点击去溜达了一圈发现是一个国内的公司做的。
obaby
2023/02/22
6830
C语言中的链表:定义、操作与实现
链表是一种常用的数据结构,它由若干个结点组成。每个结点都有两部分组成:数据域和指针域。数据域存储结点的值,而指针域则指向下一个结点。由于链表的每个结点都有指针域,所以链表可以动态分配内存。
曈曈too
2023/02/27
2.2K0
NVIDIA Pascal Geforce显卡揭秘
新一代NVIDIA“帕斯卡”(Pascal)架构显卡即将发布,各种传言也如火如荼,最近网络上流传一张图揭露全新的Geforce X家族,包含了基于GP104的X80、基于GP100的X80 ti和X8
GPUS Lady
2018/03/30
1.4K0
NVIDIA Pascal Geforce显卡揭秘
合并PASCAL VOC的目标类别
我们遇到数据集中需要将car、bus、truck合并成car,或将person、rider、pedestrain合并为person。使用修改标签的方法就可以实现。
狼啸风云
2021/01/14
6610
迷语博士的难题
两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替。如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第一句是真是假没有规律。 迷语博士遇到三个人,知道他们分别来自三个不同的民族:诚实族、说谎族和两面族。三人并肩站在博士前面。 博士问左边的人:“中间的人是什么族的?”,左边的人回答:“诚实族的”。 博士问中间的人:“你是什么族的?”,中间的人回答:“两面族的”。 博士问右边的人:“中间的人究竟是什么族的?”,右边的人回答:“说谎族的”。 请问:这三个人都是哪个民族的?
week
2018/08/24
8700
我的第一次Pascal程序
今天刚刚来学点Pascal语言,都怪我买的书大多是用Pascal语言写的,所以我只能试着学一点咯! 来一段程序员最经典的Hello World! 1 program exl_2; 2 begin 3
Angel_Kitty
2018/04/08
6300
我的第一次Pascal程序
PASCAL VOC提取出特定的目标类别
import osimport shutilann_filepath = 'D:\dataset\cityscapes\cityscape_voc_clean\Annotations\\'img_filepath = 'D:\dataset\cityscapes\cityscape_voc_clean\JPEGImages\\'img_savepath = 'D:\dataset\cityscapes\cityscape_voc_clean\JPEGImages_car\\'ann_savepath = '
狼啸风云
2020/07/14
1K0
LeetCode——Pascal's Triangle
Given numRows, generate the first numRows of Pascal’s triangle.
全栈程序员站长
2022/07/06
4340
将KITTI转换为PASCAL VOC
import os, sysimport globfrom PIL import Image # VEDAI 图像存储位置src_img_dir = "D:\dataset\cityscapes\leftImg8bit\\train\\zurich\\"# VEDAI 图像的 ground truth 的 txt 文件存放位置src_txt_dir = "D:\dataset\cityscapes\gtFine\\train\\zurich\\"src_xml_dir = "D:\dataset\citys
狼啸风云
2020/07/14
7440
PASCAL VOC统计各类目标数量
# -*- coding:utf-8 -*-import osimport xml.etree.ElementTree as ETimport numpy as npnp.set_printoptions(suppress=True, threshold=1000000)import matplotlibfrom PIL import Imagedef parse_obj(xml_path, filename): tree = ET.parse(xml_path + filename) obje
狼啸风云
2020/07/14
1.1K0
问题 1482: [蓝桥杯][算法提高VIP]Pascal三角
PASCAL三角是形状如下的三角矩阵: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 在PASCAL三角中的每个数是一个组合C(n,k)。 C(n,k)=(((((((n/1)(n-1))/2(n-2))/3)***(n-k+2))/(k-1))(n-k+1))/k 公式中交替使用乘法和除法,每次将从n开始递减的一个值相乘,然后除以下一个从1开始递增的值。 如果对行和列从0开始计数,则数字C(n,k)在n行k列。例如C(6,2)在第6行第2列。编程输出指定阶数的PASCAL三角矩阵。例如下面给出的是12阶PASCAL三角形矩阵。
且陶陶
2023/04/12
2580
问题 1482: [蓝桥杯][算法提高VIP]Pascal三角
阿波罗的轻语
老规矩先把代码给大家,新建一个html文档(新建一个txt文本文档,把后缀名改为“ .html ” 以记事本打开,把复制好的代码粘贴进去,“ 保存 ”,退出,双击或右键选择浏览器打开。如果 如果同学们觉得难,点开“ 它 ”,我一步步教。
我不是费圆
2020/09/21
4000
阿波罗的轻语
【Leetcode】Pascal's Triangle II
Given an index k, return the kth row of the Pascal’s triangle.
全栈程序员站长
2022/07/05
2090
语雀——文本绘图
简书支持md语法,但是对于一些绘图没有太多支持,毕竟简书是为了写作。 所以找了一些其他编辑器——语雀。
OPice
2019/11/27
3.1K0
Pascal三角形
作者:bakari   时间:2012.8.4 Pascal三角形又称杨辉三角形,是多项式系数的一种规律展示,最早是由我国数学家杨辉发现,比Pascal早200多年。 下面简单地总结一些其算法。 一、数组计算法: 1、公式推导: 这个很简单,看图就知道 2012080421543028.png 由图可得公式:a[ i ][ j ] = a[i - 1] [j - 1] + a[i - 1][ j ]  2、代码展示: 1 void YangHuiTriangleArray(int Row)
Linux云计算网络
2018/01/10
1.3K0
Pascal三角形
PASCAL VOC的评估代码voc_eval.py解析
给定精度和召回率计算VOC的AP,如果use_07_metric为真,使用VOC 07 11点方法。
狼啸风云
2019/12/03
1.8K0
你应该知道的ChatGPT提示语
ChatGPT 自上线以来,凭借其优异的自然语言理解和输出能力,仅花 5天就成为了活跃用户过百万的现象级产品。而上一个现象级产品 instagram 花了 2 个半月。到目前为止 ChatGPT 在全球累计用户已经过亿,相信现在也有很多人在跟 ChatGPT 聊过之后相信 AI 发展的奇点已经到来。
云原生小白
2023/08/28
4200
你应该知道的ChatGPT提示语
Free Pascal初次体验(有亮点哦)
感觉上Pascal语言写的非常有条理,和英语很像,应该是比较容易学,但是写起来真的是麻烦的要死,平时一行代码用C/C++可能就是几秒钟,用Pascal就要几分钟,Free Pascal感觉也不是很好用,虽然是新版,但是用起来感觉还是很别扭,好不容易写了个代码,编译不知道在哪编,找到了吧,输入了一个数,结果都没有,啥情况,原来还要Alt+F5去找结果,确实麻烦啊! 比如以下面这个为例: 例题:已知一位小朋友的电影票价为42元,计算x位小朋友的总票价是多少? 这个应该是再简单不过的题了,但是这题目写起来还是有点
Angel_Kitty
2018/04/08
6240
Free Pascal初次体验(有亮点哦)

相似问题

Pascal语言中的数组

118

PASCAL语言中的OctToInt

11

PASCAL语言中#的用法

10

Pascal语言中的Seidel方法

14

PASCAL语言中的特殊For循环

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文