数据结构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;
}

今日思维导图

相关推荐
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
weixin_432702262 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
passer__jw7673 小时前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
爱吃生蚝的于勒3 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~3 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
脉牛杂德4 小时前
多项式加法——C语言
数据结构·c++·算法
一直学习永不止步4 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数
wheeldown12 小时前
【数据结构】选择排序
数据结构·算法·排序算法
躺不平的理查德16 小时前
数据结构-链表【chapter1】【c语言版】
c语言·开发语言·数据结构·链表·visual studio
阿洵Rain16 小时前
【C++】哈希
数据结构·c++·算法·list·哈希算法