偶写的链表、堆栈、队列的集合操作------的解释补充

偶发写了几个关于链表的集合操作的程序,有一些人反映说不是很懂,希望偶能够解释一下,当然,

偶的程序进行了一层的封装,可能理解起来不是很自然,另外程序本身也有部分的不完善,不理解是正常的!

偶粗略的总结了一下,主要是函数的分析,至于main函数,就留给大家细细琢磨吧~~

1.定义一个接点型的数据结构类型
struct Node
{
  DataType  info;
  PNode link;
};
2.在用一个LinkType的数据结构将接点的头和尾封装一下,即保存头和尾的指针。
struct LinkType
{
  PNode base;
  PNode top;
};
3.定义一个接点类型的指针PNode,和一个指向LinkType类型的指针PLinkType
4.我们访问链表、堆栈或者队列的时候,都要用PLinkType指针,因为这样可以使我们的层次结构和思维更加的清晰(当然不这样也可以,但是不是很划的来)。
5.定义我们的函数
PLinkType CreatePointer(void):创建一个PLinkType类型的接点,用于存放头和尾的指针,并将它们初始化,都置为NULL
PLinkType CreateHeadNode(PLinkType pltype):创建PNode类型的头和尾接点,并将它们置为空。
PLinkType push_Type(PLinkType pltype,DataType n):用于设置我们想要的链表或者其它类型的数据类型长度,并重新的设置一下我们的尾接点。
PLinkType print_Type(PLinkType pltype):将我们的链表输出,此时的尾指针自减,当头和尾相等时结束输出并返回一个PLinkType类型的指针。
PLinkType pop_Type(PLinkType pltype):此函数多余,可以去掉
PLinkType de_Type(PLinkType pltype, DataType j):将链表或者是队列的j个数据从前面输出来,并将头指针后移。
PLinkType pop_Stack(PLinkType pltype,DataType j)将堆栈的j个数据从后面输出来,并将指针前移PLinkType free_all(PLinkType pltype)释放所有的接点空间
6.main函数主要是调用的switch函数,一个主switch,每个case中间两个分switch(自然结束就相当于第三个case(0) )这里面就不用我详细的解释了吧^_^
7.经过我一写我发现了很多的不足之处,不知您发现了没有,呵呵,等我修改好了再告诉你吧~

 

 

 

 

 

时间: 2024-10-29 14:26:39

偶写的链表、堆栈、队列的集合操作------的解释补充的相关文章

数据结构 单链表-求大神给我讲讲数据结构单链表和队列

问题描述 求大神给我讲讲数据结构单链表和队列 帮我彻底分析下两种结构,感激不尽多谢大神了 解决方案 单链表和队列是两个层次的事情. 单链表是一种基本的表示一个线性表的方式,它记录下当前节点的数据和指向下一个节点的指针.因此一环一环可以得到整个数据.除了单链表,我们还有数组.双向链表.循环链表等. 队列是一种先进先出的数据结构,它高于链表一个层次,这是说,你可以用链表实现队列(当然也可以用数组或者别的).另外还有先进后出的数据结构(堆栈)等. 解决方案二: 具体你可以google下wikipedi

《C++多线程编程实战》——1.9 链表、队列和栈示例

1.9 链表.队列和栈示例 下面的示例将演示线性链表(可包含任何泛型类型T)的OOP用法.该示例背后的思想是把继承作为表示"B是一种A"这种关系的模型. 线性链表是一种线性排列元素的结构,第1个元素链接第2个元素,第2个元素链接第3个元素,以此类推.线性链表的基本操作是,在线性链表中插入元素(PUT)和获取元素(GET).队列是一种线性链表,其中的元素按先进先出的次序排列,即FIFO(First In First Out).因此,从队列的顶部获取元素,从队列的底部插入新元素.栈也是一种

c++今天写双链表时链接错误LNK2001,代码如下(还未写完想测试一下结果没通过)

问题描述 c++今天写双链表时链接错误LNK2001,代码如下(还未写完想测试一下结果没通过) 发到贴吧上问了一次,回复较少,所以又来问一遍 代码在贴吧上http://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&sc=42728746794&z=2748059140#42728746794<!--

jsp页面循环集合操作整理_JSP编程

第一种:struts1.2循环遍历元素,name是结果集.引用标签库<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <logic:iterate>主要用来处理在页面上输出集合类,集合一般来说是下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 例: 复制代码 代码如下: <logic:iterate

Linq学习(5) 集合操作

本篇介绍Linq的集合操作,继续使用<Linq 学习(3) 语法结构>中介绍的数据源. Count/LongCount Count/LongCount 返回结果集中元素的数量,返回类型分别为int/long. 原型为: public static int Count<TSource>(this IEnumerable<TSource> source[, Func<TSource, bool> predicate]) 姓名长度大于四个字符的学生的数量: var

初步介绍MySQL中的集合操作

  啥是集合操作? 通常来说,将联接操作看作是表之间的水平操作,因为该操作生成的虚拟表包含两个表中的列.而我这里总结的集合操作,一般将这些操作看作是垂直操作.MySQL数据库支持两种集合操作:UNION DISTINCT和UNION ALL. 与联接操作一样,集合操作也是对两个输入进行操作,并生成一个虚拟表.在联接操作中,一般把输入表称为左输入和右输入.集合操作的两个输入必须拥有相同的列数,若数据类型不同,MySQL数据库自动将进行隐式转换.同时,结果列的名称由左输入决定. 前期准备 准备测试表

一个java写的程序,求详细每一行的解释

问题描述 一个java写的程序,求详细每一行的解释 import java.util.Scanner; public class Test{ public static void main(String args[]){ Scanner input = new Scanner(System.in); final int a =50; final int b =10; int c = 0; int d = 2; while(c<a){ boolean e =true ; for(int divis

设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列

问题描述 设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列 设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列( )存储方式 最节省运算时间. (A) 单向链表 (B) 单向循环链表 (C) 双向链表 (D) 双向循环链表 解决方案 (C) 双向链表 解决方案二: 难道不是B(单向循环链表)? 双向链表在链表的任何位置插入和删除,但如果最常用的操作是在表尾插入和删除,单向循环链表就可以吧 解决方案三: 解决方案四: 解决方案五: 链表的常用操作

《并行计算的编程模型》一3.7 集合操作

3.7 集合操作 OpenSHMEM提供了几个通常被认为是集合操作的函数,并分为四类:广播.收集.归约(所有操作都在对称内存中)和非全局同步屏障(通常被划分为同步操作,这里包含它是因为它也依赖于与其他集合操作相同的同步数组(sync array)结构).其中的每个函数都包含同步并需要使用对称同步数组.这些操作运行在所有PE 或PE的子集上.如果一个集合操作执行在PE的子集上,仅参与这个操作的PE可以调用集合函数:如果未参与的PE试图调用集合操作,结果是未定义的.值得注意的是虽然集合操作包含同步,