链表,栈,队列

链表

使用链表时最好使用一个表头,也称为头结点。个人的感受是,使用头节点有一个好处那就是可以方便地修改链表中第一个结点的值。因为对链表中结点的操作通常都是通过调用函数,将指向节点的指针结点作为参数传入来进行更改的。但由于函数是call by value,若使用一个指针直接指向第一个结点, 这个指针指向的结点的值可以改变,但指针本身的值不能改变。例如要在链表的第一个结点前插入一个新的结点,如果指向第一个结点的指针是p,则当p传入函数时,p自身的值无法被改变,也就是说p始终只能指向第一个结点。这时候如果想改变p的值(也就是p中存储的地址),则必须让函数返回一个值赋给p,这样十分繁琐。而有了表头以后并设置一个指针(如L)指向表头,则可以通过L访问整个链表。更重要的是,对第一个结点的访问是通过L指向的表头的next指针进行的,当将L作为参数传入函数时,只有L的值不能改变(L不能指向其他空间),但表头、链表中的第一个结点和其他所有结点都是通过指针去访问的,这样就可以直接在函数中改变链表中所有结点和表头的值,而不必担心call by value带来的影响。当然,L的创建必须要通过函数返回一个值在main()中赋给它来实现,通常增加一个返回值为指向表头的指针的函数即可

另外经过查找后还在网上发现了一些设置表头的优点,转载如下:

(1) 对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些

(2) 对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的


队列

队列是在队尾(rear)插入元素,在队列头部(front)删除元素

队列可以用链表实现也可以用数组实现。如果用数组实现的话,头结点中除了要存储front和rear之外,还要添加一个记录数组长度的变量(total)和记录队列中已有元素个数的变量(current),通过判断current是否小于等于total来判断队列是否已满。初始化时,front应为0,rear应为-1。在更改front和rear的值时记得对数组长度取余

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值