- 博客(13)
- 收藏
- 关注
原创 数组和广义表
数组的顺序表示和实现//---数组的顺序存储表示和实现---- #include<stdarg.h> //标准头文件,提供宏va_start,va_arg,和va_end, //用于存取变长参数表 #define MAX_ARRAY_DIM 8 //假设数组维数的最大值为8 typedef struct{ ElemType *base;
2016-11-02 12:19:08
304
原创 循环队列———队列的顺序表示和实现
循环队列类型的模块说明如下//----循环队列————队列的顺序存储结构———— #define MAXQSIZE 100 //最大队列长度 typedef struct{ QElemType *base; //初始化的动态分配存储空间 int front; //头指针,若队列不空,指向队列头元素 int rear; //尾指针,若队列不空,指向队列尾元素
2016-11-01 21:19:38
560
原创 链队列---队列的链式表示和实现
链队列类型的模块说明//==ADT Queue 的表示与实现 ======//-------单链队列——————队列的链式存储结构———————— typedef struct QNode{ QElemType data; struct QNode *next; }//QNode,*QueuePtr; typedef struct{ QueuePtr front
2016-11-01 19:58:57
639
原创 队列
和栈相反,队列是一种先进先出的线性表,允许在表的一端进行插入,而在另一端删除元素。//队列的抽象数据类型定义 ADT Queue{ 数据对象:D={ai|ai属于ElemSet,i=1,2,...,n,n>=0} 数据关系:R1={<a(i-1),ai>|a(i-1),ai属于D,i=2,...,n} 约定其中ai为队列头,an端为队列尾。 基本操作:
2016-11-01 19:03:57
281
原创 用栈解决迷宫问题
为了保证在任何位置上都能沿原路退回,显然需用一个后进先出的结构来保存从入口到当前位置的路径,算法中提到的当前位置可通,指的是未曾走到过的通道块,即要求该方块位置不仅是通道块,而且既不在当前路径上(否则所求路径就不是简单路径),也不是曾经纳入过路径的通道块(否则只能在死胡同内转圈) typedef struct{ int ord; //通道块在路径上的“序号” PosType
2016-10-30 11:35:52
448
原创 栈的应用
数制转换 void conversion(){ //对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 InitStack(S); //构造空栈 scanf("%d",N); while(N){ Push(S,N%8); N=N/8; } while(!StackEmpty(s)){ Pop(S,e); print
2016-10-30 11:20:21
335
原创 栈
栈的抽象数据类型 ADT Stack{ 数据对象:D={ai|ai属于ElemSet,i=1.2...,n,n>=0} 数据关系:R1={1),ai>|a(i-1),ai属于D,i=2,...,n} 约定an端为栈顶,a1端为栈顶。 基本操作: InitStack(&S) 操作结果:构造一个空栈S。
2016-10-28 23:09:16
405
原创 静态链表的使用
一般情况下,若第i个分量表示链表的第k个结点,则S[i].cur指示第k+1个结点的位置。因此在静态链表中实现线性表的操作和动态链表相似,以整型游标i代替动态指针p,i=S[i].cur操作实为指针后移(p=p->next),例如,在静态链表中实现的定位函数LocateElem. int LocateElem_SL(SLinkList S,ElemType e){ //在静态单链线性
2016-10-23 22:55:57
1734
原创 将两个有序链表并为一个有序链表
按照算法MergeList的思想,需设立3个指针pa,pb,pc,其中pa和pb分别指向La表和Lb表中当前比较插入的结点,而pc指向Lc表中当前最后一个结点,若pa->data<=pb->data,则将pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之后。显然,指针的初始状态:当LA和LB为非空表时,pa和pb分别指向La和Lb表中第一个结点,否则为空;pc指向空表Lc中的
2016-10-23 20:22:18
843
原创 单链表(线性链表)数据元素插入和删除
数据元素的插入:为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中,根据插入操作的逻辑定义,还需要修改结点a中的指针域,令其指向节点x,而结点x中的指针域应指向结点b,从而实现3个元素a,b和x之间逻辑关系的变化。数据元素的删除:在线性表中删除元素b时,为在单链表中实现元素a,b和c之间逻辑关系的变化,仅需要修改结点a中的指针域即可。下面算法分别为ListInsert和ListDe
2016-10-23 00:03:45
8601
原创 合并线性表
假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A并B,这就要求对线性表LA扩大,将存在于线性表LB重而不存在于线性表LA中的元素插入到线性表LA中去。只要从线性表LB中依次取得每个数据元素,并依值在线性表LA重进行查访,若不存在,则插入之。这里写代码片void union(List &La,List Lb){ //将所有在线性表L中但不在La中的数据元素插
2016-10-21 12:50:23
663
原创 线性表之2.2顺序表示和实现
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素 //换句换说,以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。 //——线性表的动态分配顺序存储结构—— //这里写代码片#define LIST_INST_SIZE 100 #define LISTINCREMENT 10
2016-10-19 10:53:51
255
原创 数据结构之算法2.1
这里写代码片void MergeList)(List La,List Lb,List &Lc){ //已知线性表La和Lb中的数据元素按值非递减排列。 //归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列。 InitList(Lc); i=j=1;k=0; La_len=(ListLength(La);Lb_len=ListLength(Lb); while((i<=La_len)&
2016-10-18 22:58:12
424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人