数据结构day07(栈和队列)

今日任务

链式队列:

head.h

cpp 复制代码
#ifndef __HEAD_H__
#define __HEAD_H__

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

typedef int datatype;
typedef struct link_list{
	datatype data;
	struct link_list* next;
}link,*linkp;
typedef struct circulate_line_top{
	linkp front;
	linkp rear;
}link_top,*link_topp;

link_topp create_top();
int push(link_topp p,datatype data);
int pull(link_topp p);
int output(link_topp p);
int del(link_topp p);

#endif

fun.c

cpp 复制代码
#include "head.h"
/*
 * function:    创建top节点
 * @param [ in] 
 * @param [out] 
 * @return      
 */
link_topp create_top(){
	link_topp top=(link_topp)malloc(sizeof(link_top));
	if(NULL==top){
		puts("top point malloc failed");
		return NULL;
	}
	top->front=NULL;
	top->rear=NULL;
	puts("top point create success");
	return top;
}
/*
 * function:    创新链表节点
 * @param [ in] 
 * @param [out] 
 * @return      
 */
linkp create(datatype data){
	linkp p=(linkp)malloc(sizeof(link));
	if(NULL==p){
		puts("link list point malloc failed");
		return NULL;
	}
	p->data=data;
	p->next=NULL;
	puts("link list point create success");
	return p;
}
/*
 * function:    空指针判定
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int void_point(link_topp p){
	if(NULL==p){
		puts("null point pass");
		return -1;
	}
	return 0;
}
/*
 * function:    判空
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int is_empty(link_topp p){
	if(NULL==p){
		puts("null point pass");
		return -1;
	}
	if(p->front==NULL){
		puts("stack is NULL");
		return 1;
	}
	return 0;
}
/*
 * function:    入队
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int push(link_topp p,datatype data){
	if(void_point(p))
		return -1;
	linkp new=create(data);
	//入队
	
	if(p->front==NULL)
		p->front=new;
	if(p->rear!=NULL)
		p->rear->next=new;
	p->rear=new;
	
//	printf("t->front%d\n",p->front->data);
//	printf("t->rear%d\n",p->rear->data);
//	printf("t->front%p\n",p->front);
	puts("push success");
	return 0;
}
/*
 * function:    出队
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int pull(link_topp p){
	if(void_point(p))
		return -1;
	//判空
	if(p->front==NULL){
		puts("link stack is null ,it's no deed to pull");
		return 0;
	}
	//出队
	linkp del=p->front;//记录出队指针,free
	datatype data=del->data;
	p->front=p->front->next;
	free(del);
	del=NULL;
	puts("pull success");
	return 0;
}
/*
 * function:    循环输出
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int output(link_topp p){
	linkp i=p->front;//不移动原指针
	if(void_point(p))
		return -1;
	if(is_empty(p))
		return 0;
	while(i!=NULL){
		printf("<-%d",i->data);
		i=i->next;
	}
	puts("output success");
	return 0;
}
/*
 * function:    销毁
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int del(link_topp p){
	if(void_point(p))
		return -1;
	linkp del;
	while(p->front!=NULL){
		del=p->front;
		p->front=p->front->next;
		free(del);
	}
	free(p);
	puts("del success");
	return 0;
}

main.c

cpp 复制代码
#include "head.h"
//链表实现循环队列---尾插头删
int main(int argc, const char *argv[])
{
	link_topp t=create_top();
	push(t,11);
	push(t,12);
	push(t,13);
	push(t,14);
	printf("t->front%p\n",t->front);
	output(t);

	printf("t->front%p\n",t->front);
	pull(t);
	output(t);
	pull(t);
	output(t);
	pull(t);
	output(t);
	pull(t);
	output(t);
	pull(t);
	output(t);
	del(t);
	t=NULL;
	return 0;
}

运行效果:

递归

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(int a){
	printf("%d\n",a%10);
	a/=10;
	if(a>0)
		fun(a);
	return 0;
}
int main(int argc, const char *argv[])
{
	//使用递归实现程序,输入一个数,输出该数的每个数
	int a=123456;
	fun(a);
	return 0;
}

今日思维导图

相关推荐
CSharp精选营3 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假6 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠7 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦14 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠15 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾15 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82115 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q15 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒15 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记15 天前
单项不带头不循环链表
数据结构·链表