新浪博客

几种数据结构的代码定义

2017-04-28 10:53阅读:
一、串
1)定义一个顺序存储串
(1)#define maxsize 255
char s[maxsize];
(2)typedef struct
{
char s[maxsize];//存储串中的字符
int curlen;//当前串的长度
}seqstring;
2)定义一个堆分配存储串
typedef struct
{
char *ch;//按串长分配存储空间
int curlen;//串的长度
}pstring;
3)定义一个链式存储串
typedef struct linknode
{
char data;// 串的数据域
struct linknode * next;//串的指针域
}linkstring;
4)串的主要操作(某些操作一句代码就可以实现)
求字符串长度strlenwhile(*S ++ != '\0') len ++;
字符串的复制strcpywhile((*S ++ = *T ++) != '\0');
字符串的连接strcatlen = strlen(S1); S1=S1 + len; while((*S1 ++ = *S2 ++) != '\0');
求子串strstr
比较串的大小strcmpreturn 0表示字符串相等,return 1表示源串大于目标串,return -1反之
插入字符串strinsert
删除子串strdelete
子串定位(较复杂)strlocate
二、链表
1.定义一个顺序表:
#define maxsize 1024
typedef int datatype //节点类型为datatype,可为任意类型
typedef struct
{
datatype data[maxsize];//线性表中的各个节点存储在datatype类型的一维数组中,第一个节点 //是data[0],其下标值为0,其位置是1
int last;//线性表中最后一个节点的下标值,即线性表的长度n=last+1
}sequenlist;
基本运算有插入运算,删除运算,
2.定义一个单链表
typedef int datatype;
typedef struct node
{
datetype data;//节点的数据域类型
struct node *next;// 节点的指针域类型
}linklist;
基本运算有创建单链表(头插法,尾插法),查找运算(按序号,按值),插入运算,删除运算
3.定义一个双链表
typedef struct dnode
{
datatype data;//结点的数据域类型
struct dnode * prior;//结点的前趋指针
struct dnode * next;//结点的后继指针
}dlinklist;
基本运算有插入运算,删除运算。
三、队列
1.定义一个顺序队列:
#define maxsize 1024
typedef int datatype;
typedef struct
{
datatype data[maxsize];
int front;//队列的队头标志位置
int rear;//队列的队尾的标志的位置
}sequeue;
基本运算有置空对,判队空,取头结点,入队,出队
注意:顺序队列的队头和队尾的标志位置,队列的溢出
2.循环队列的假上溢现象。
循环队列的队空队满状态的判断:解决方法有三种
1)设一个标志位,当队空时flag=0,入队成功,flag=1,出队成功,flag=0,结合frontrear一起判断
2)设一个计数器,初始值count=0,入队加1,出队减1count=0时对空,当count>0front=rear,队满
3)少用一个结点空间,当rear=front时队哦那个,入队时当尾指针加1等于头指针,即(rear+1)%maxsize=front,说明队满
3.定义一个链队列

linklist *front;//队列的头指针
linklist *rear;//队列的尾指针
}linkqueue;
四、堆栈
1.定义一个顺序栈
#define maxsize 1024;
typedef int datatype;
typedef struct
{
datatype data[maxsize];//堆栈的各个结点存储在一维数组中
int top;//堆栈的栈顶标志位
}sqstack;
几个基本运算:置空栈,判栈空,取栈顶结点,入栈,出栈
2.定义一个链栈:
typedef struct snode
{
datatype data;//链栈结点的数据域
struct snode *next;//链栈结点的指针域
}linkstack;
linkstack * top;
几个基本运算:置空栈,判栈空,取栈顶结点,入栈,出栈
五、树
1.二叉树:每个结点最多有两个直接后继的树,又有两种特殊状态:满二叉树和完全二叉树
2.定义一个二叉链表
#define maxsize 100
typedef int datatype;
typedef struct Node2
{
datatype data;//二叉树的结点数据
struct Node2 *lchild;//左指针指向左孩子
struct Node2 *rchild;//右指针指向右孩子
}BTNode2;
3.定义一个三叉链表
typedef int datatype;
typedef struct Node3
{
datatype data;//二叉树的结点数据
struct Node3 *parent;//指向双亲
struct Node3 *lchild;//左指针指向左孩子
struct Node3 *rchild;//右指针指向右孩子
}BTNode3;
4.基本运算有二叉链表的生成和输出,二叉树的遍历(先序、中序、后序)
六、图(略,其实是太多了我还没看完)

我的更多文章

下载客户端阅读体验更佳

APP专享