c语言获取当前时间_数据结构篇_C语言「抄作业」

af9ac6aece2d1afa660e9221ad04a5cc.png

本文为目录性质的导航页面,按照一定的话题组织

C语言「抄作业」之数据结构篇

  • 数据结构(Data structure)
    • 列表(List)
      • 顺序表(Sequential list)
      • 单向链表(Singly linked list)
      • 循环单链表(Circular Singly linked list)
        • 约瑟夫环(Josephus problem)
      • 循环双链表(Circular doubly linked list)
    • (Stack)
      • 链栈(Linked stack)
    • 队列(Queue)
      • 单链队列(Linked queue)
    • (Tree)
      • 二叉树(Binary tree)
        • 二叉链表(Binary Linked List)

顺序表(Sequential list)

typedef struct {
	lElemType *elem;	/* 存储空间基址 */
	int length;		/* 当前长度 */
	int listSize;		/* 当前分配的存储容量,以sizeof(lElemType)为单位 */
} *seqList;

/*********************************** 顺序表基本操作(12个) ***********************************/
void initList (seqList L);	/* 初始化 */
void destroyList (seqList L);	/* 销毁 */
void clearList (seqList L);	/* 清空 */

status listIsEmpty (seqList L);	/* 判断顺序表是否为空 */
int listLength (seqList L);	/* 获取顺序表的长度 */
status getElem (seqList L, int i, lElemType *e);	/* 获取顺序表指定位序元素值 */

/* 寻找符合特征(compare)元素的位序 */
int locateElem (seqList L, lElemType e, status (*compare)(lElemType, lElemType));

status priorElem (seqList L, lElemType cur_e, lElemType *pre_e);	/* 获取指定元素的前驱 */
status nextElem (seqList L, lElemType cur_e, lElemType *next_e);	/* 获取指定元素的后继 */

status listInsertNode (seqList L, int i, lElemType e);	/* 顺序表指定位置前插入新元素 */
status listDeleteNode (seqList L, int i, lElemType *e);	/* 删除顺序表指定位置元素 */

void listTraverse (seqList L, void (*vi)(lElemType));	/* 依次对顺序表的每个元素调用函数vi() */
/********************************************************************************************/
status compare (lElemType des, lElemType src);	/* compare函数,数据元素特征判定 */
void vi (lElemType e);				/* visit函数,定义为打印元素值 */
/********************************************************************************************/
碧海风:顺序表_C语言「抄作业」​zhuanlan.zhihu.com
55eff45c6e9507a8efab49c29b8384b8.png

单向链表(Singly linked list)

/* 单向链表数据结构 */
typedef struct lNode {
	lElemType data;
	struct lNode *next;
} lNode, *linkList;

/***************************** 带头结点的单向链表基本操作(12个) *****************************/
void initList (linkList *L);	/* 初始化 */
void destroyList (linkList L);	/* 销毁 */
void clearList (linkList L);	/* 清空 */

status listIsEmpty (linkList L);	/* 判断单向链表是否为空 */
int listLength (linkList L);		/* 获取单向链表的长度 */
status getElem (linkList L, int i, lElemType *e);	/* 获取单向链表指定位序元素值 */

/* 寻找符合特征(compare)元素的位序 */
int locateElem (linkList L, lElemType e, status (*compare)(lElemType, lElemType));

status priorElem (linkList L, lElemType cur_e, lElemType *pre_e);	/* 获取指定元素的前驱 */
status nextElem (linkList L, lElemType cur_e, lElemType *next_e);	/* 获取指定元素的后继 */

status listInsertNode (linkList L, int i, lElemType e);		/* 单向链表指定位置前插入新元素 */
status listDeleteNode (linkList L, int i, lElemType *e);	/* 删除单向链表指定位置元素 */

void listTraverse (linkList L, void (*vi)(lElemType));		/* 依次对单向链表的每个元素调用函数vi() */
/********************************************************************************************/
status compare (lElemType des, lElemType src);	/* compare函数,数据元素特征判定 */
void vi (lElemType e);				/* visit函数,定义为打印元素值 */
/********************************************************************************************/
碧海风:单向链表_C语言「抄作业」​zhuanlan.zhihu.com
3d93d3bc817e4b9b7aba2b981096316c.png

循环单链表(Circular Singly linked list)

/* 循环单链表数据结构 */
typedef struct lNode {
	lElemType data;
	struct lNode *next;
} lNode, *cirLinkList;

/**************************** 带头结点的循环单链表基本操作(12个) ****************************/
void initList (cirLinkList *L);		/* 初始化 */
void destroyList (cirLinkList L);	/* 销毁 */
void clearList (cirLinkList L);		/* 清空 */

status listIsEmpty (cirLinkList L);	/* 判断循环单链表是否为空 */
int listLength (cirLinkList L);		/* 获取循环单链表的长度 */
status getElem (cirLinkList L, int i, lElemType *e);	/* 获取循环单链表指定元素值 */

/* 寻找符合特征(compare)元素的位序 */
int locateElem (cirLinkList L, lElemType e, status (*compare)(lElemType, lElemType));

status priorElem (cirLinkList L, lElemType cur_e, lElemType *pre_e);	/* 获取指定元素的前驱 */
status nextElem (cirLinkList L, lElemType cur_e, lElemType *next_e);	/* 获取指定元素的后继 */

status listInsertNode (cirLinkList L, int i, lElemType e);	/* 循环单链表指定位置前插入新元素 */
status listDeleteNode (cirLinkList L, int i, lElemType *e);	/* 删除循环单链表指定位置元素 */

void listTraverse (cirLinkList L, void (*vi)(lElemType));	/* 依次对循环单链表的每个元素调用函数vi() */ 
/********************************************************************************************/
status compare (lElemType des, lElemType src);	/* compare函数,数据元素特征判定 */
void vi (lElemType e);				/* visit函数,定义为打印元素值 */
/********************************************************************************************/
碧海风:循环单链表_C语言「抄作业」​zhuanlan.zhihu.com
398fff2b43581239147008da40e15896.png

循环双链表(Circular doubly linked list)

/* 循环双链表数据结构 */
typedef struct douLNode {
	lElemType data;
	struct douLNode *prior, *next;
} douLNode, *cirDouLinkList;

/**************************** 带头结点的循环双链表基本操作(12个) ****************************/
void initList (cirDouLinkList *L);	/* 初始化 */
void destroyList (cirDouLinkList L);	/* 销毁 */
void clearList (cirDouLinkList L);	/* 清空 */

status listIsEmpty (cirDouLinkList L);	/* 判断循环双链表是否为空 */
int listLength (cirDouLinkList L);	/* 获取循环双链表的长度 */
status getElem (cirDouLinkList L, int i, lElemType *e);	/* 获取循环双链表指定元素值 */

/* 寻找符合特征(compare)元素的位序 */
int locateElem (cirDouLinkList L, lElemType e, status (*compare)(lElemType, lElemType));

status priorElem (cirDouLinkList L, lElemType cur_e, lElemType *pre_e);	/* 获取指定元素的前驱 */
status nextElem (cirDouLinkList L, lElemType cur_e, lElemType *next_e);	/* 获取指定元素的后继 */

status listInsertNode (cirDouLinkList L, int i, lElemType e);	/* 循环双链表指定位置前插入新元素 */
status listDeleteNode (cirDouLinkList L, int i, lElemType *e);	/* 删除循环双链表指定位置元素 */

void listTraverse (cirDouLinkList L, void (*vi)(lElemType));	/* 依次对循环双链表的每个元素调用函数vi() */
/********************************************************************************************/
status compare (lElemType des, lElemType src);	/* compare函数,数据元素特征判定 */
void vi (lElemType e);				/* visit函数,定义为打印元素值 */
/********************************************************************************************/
碧海风:循环双链表_C语言「抄作业」​zhuanlan.zhihu.com
77d894c4e5047b6bec64a89dc30c37f5.png

链栈(Linked stack)

/* 链栈结点数据结构 */
typedef struct sNode {
	sElemType data;
	struct sNode *next;
} sNode, *sNodePtr;

/* 链栈数据结构 */
typedef struct linkStk{
	sNodePtr top; /* 栈顶指针 */
} linkStk, *linkStack;

/******************************* 带头结点的链栈基本操作(9个) ********************************/
void initStack (linkStack *S);		/* 初始化 */
void destroyStack (linkStack S);	/* 销毁 */
void clearStack (linkStack S);		/* 清空 */

status stackIsEmpty (linkStack S);	/* 判断链栈是否为空 */
int stackLength (linkStack S);		/* 获取链栈的长度 */
status getTopElem (linkStack S, sElemType *e);	/* 获取栈顶元素值 */

status push (linkStack S, sElemType e);	/* 入栈 */
status pop (linkStack S, sElemType *e);	/* 出栈 */

void stackTraverse (linkStack S, void (*vi)(sElemType));	/* 依次对链栈的每个元素调用函数vi() */
/********************************************************************************************/
void vi (sElemType e);	/* visit函数,定义为打印元素值 */
/********************************************************************************************/
碧海风:链栈_C语言「抄作业」​zhuanlan.zhihu.com
9c23059ebc05432d57ad1d95a2c40f17.png

单链队列(Linked queue)

/* 单链队列结点数据结构 */
typedef struct qNode {
	qElemType data;
	struct qNode *next;
} qNode, *qNodePtr;

/* 单链队列数据结构 */
typedef struct linkQue {
	qNodePtr front;	/* 队首指针 */
	qNodePtr rear;	/* 队尾指针 */
} linkQue, *linkQueue;

/****************************** 带头结点的单链队列基本操作(9个) *****************************/
void initQueue (linkQueue *Q);		/* 初始化 */
void destroyQueue (linkQueue Q);	/* 销毁 */
void clearQueue (linkQueue Q);		/* 清空 */

status queueIsEmpty (linkQueue Q);	/* 判断单链队列是否为空 */
int queueLength (linkQueue Q);		/* 获取单链队列的长度 */
status getHeadElem (linkQueue Q, qElemType *e);	/* 获取队首元素值 */

status enQueue (linkQueue Q, qElemType e);	/* 入队 */
status deQueue (linkQueue Q, qElemType *e);	/* 出队 */

void queueTraverse (linkQueue Q, void (*vi)(qElemType));	/* 依次对单链队列的每个元素调用函数vi() */
/********************************************************************************************/
void vi (qElemType e);	/* visit函数,定义为打印元素值 */
/********************************************************************************************/
碧海风:单链队列_C语言「抄作业」​zhuanlan.zhihu.com
4afc3e29f74572a5d2caffa60ac89cc2.png

二叉链表(Binary Linked List)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define biTElemType char			/* 二叉链表元素数据类型 */
#define BITNODE_SIZE sizeof (struct biTNode)	/* 二叉链表结点空间大小 */

#define status int	/* 状态型变量 */
#define OVERFLOW -1	/* 内存溢出状态码 */
#define ERROR 0		/* 错误状态码 */
#define OK 1		/* 正确状态码 */

#define Nil '#'		/* 空结点 */

/* 二叉树的二叉链表数据结构 */
typedef struct biTNode {
	biTElemType data;
	struct biTNode *lchild, *rchild;
} biTNode, *linkBiTree;

/****************************** 二叉树的二叉链表基本操作(22个) ******************************/
void initBiTree (linkBiTree *T);	/* 初始化二叉树 */
void destroyBiTree (linkBiTree *T);	/* 销毁二叉树 */
void clearBiTree (linkBiTree *T);	/* 清空二叉树 */

void createBiTree (linkBiTree *T);	/* 先序构造二叉树 */

status biTreeIsEmpty (linkBiTree T);	/* 判断二叉树是否为空 */
int biTreeDepth (linkBiTree T);		/* 获取二叉树的深度 */
status getRootElem (linkBiTree T, biTElemType *e);	/* 获取二叉树根元素值 */

linkBiTree pointElem (linkBiTree T, biTElemType e);	/* 寻找指定元素的地址 */
status parentElem (linkBiTree T, biTElemType cur_e, biTElemType *parent_e);		/* 获取指定元素的父结点元素值 */
status leftChildElem (linkBiTree T, biTElemType cur_e, biTElemType *lchild_e);		/* 获取指定元素的左孩子元素值 */
status rightChildElem (linkBiTree T, biTElemType cur_e, biTElemType *rchild_e);		/* 获取指定元素的右孩子元素值 */
status leftSiblingElem (linkBiTree T, biTElemType cur_e, biTElemType *lsibling_e);	/* 获取指定元素的左兄弟元素值 */
status rightSiblingElem (linkBiTree T, biTElemType cur_e, biTElemType *rsibling_e);	/* 获取指定元素的右兄弟元素值 */

status biTreeInsertChild (linkBiTree p, int LR, linkBiTree s);		/* 二叉树指定结点插入新子树 */
status biTreeDeleteChild (linkBiTree p, int LR);			/* 删除二叉树指定结点子树 */

void preOrderTraverse (linkBiTree T, void (*vi)(biTElemType));		/* 先序遍历二叉树的每个元素调用函数vi() */
void inOrderTraverse (linkBiTree T, void (*vi)(biTElemType));		/* 中序遍历二叉树的每个元素调用函数vi() */
void postOrderTraverse (linkBiTree T, void (*vi)(biTElemType));		/* 后序遍历二叉树的每个元素调用函数vi() */

void levelOrderTraverse (linkBiTree T, void (*vi)(biTElemType));	/* 层次遍历(利用队列)二叉树的每个元素调用函数vi() */
void iterativePreOrderTraverse (linkBiTree T, void (*vi)(biTElemType));	/* 前序遍历(利用栈)二叉树的每个元素调用函数vi() */
void iterativeInOrderTraverse (linkBiTree T, void (*vi)(biTElemType));	/* 中序遍历(利用栈)二叉树的每个元素调用函数vi() */
void iterativePostOrderTraverse (linkBiTree T, void (*vi)(biTElemType));/* 后序遍历(利用栈)二叉树的每个元素调用函数vi() */
/********************************************************************************************/
void vi (biTElemType e);	/* visit函数,定义为打印元素值 */
/********************************************************************************************/
碧海风:二叉树的二叉链表_C语言「抄作业」​zhuanlan.zhihu.com
9b9e75ed5268d00715490243ebcaf448.png

C语言抄作业系列,只有答案,没有讲解!

计算机科学专业毕业多年的一个啥也没学会而转行做了产品经理的家伙,从当年的各种作业里搬运来的一些乱七八糟的东西。

C语言「抄作业」​www.zhihu.com
54b5663a7f9a7d9688c8f24b601375bf.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值