2020-10-23

记录常用的一些数据结构之栈

栈:是先进后出(FILO,first in last out)的线性表(stack),它要求只在表尾进行插入和删除。端口有栈顶(top),栈底(button)。
栈的常用操作:进栈(push,压栈)和出栈(pop,弹栈)。
c语言版:
一、栈的定义

typedef struct{
	ElemType *base;
	ElemType *top;
	int StackSize;
}spStack;

二、创建一个栈

#define STACK_INIT_SIZE 100
void initStack(sqStack *s){
	s->base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemTpye));
	if(!s->base){
		exit(0);
	}
	s->top=s->top;
	s->stackSize=STACK_INIT_SIZE;
}

三、入栈操作(push)

#define STACKINCREMENT 10
void push(sqSatck *s, ElemType e){
	if(s->top - s->base == s->stackSize){
		s->base = (ElemType*)realloc(s->base,(s->stackSize+STACKINCREMENT)*sizeof(ElemType));
		if(!s->base)
			exit(0);
		s->top = s->base + s->stackSize;
		s->stackSize = s->stackSize + STACKINCREMENT;
	}
	*(s->top)=e;
	s->top;
}

四、出栈操作(pop)

ElemType pop(sqStack *s, ElemType e){
	if(s->top == s->base)
		return ;
	*e = *--(s->top);
}

五、清空一个栈(clearStack)

void clearStack(){
	s->top = s->base;
}

六、销毁一个栈

void destroyStack(){
	int i, len;
	len = s->stackSize;
	for(i = 0; i<len ;i++){
		free(s->base);
		s->base++;
	}
	s->base = s-top = NULL;
	s->stackSize = 0;
}

七、计算当前容量

int StackLen(sqStack s){
	return s.top - s.base;	
}

java版本:
java中将栈给封装起来,用起来比c语言好用。所以不需要自己去建立栈的结构框架。下面介绍一下常用的几个函数:

常用的5个函数:
public E push();//出栈
public E pop(); //入栈
public E peek(); //栈顶元素
public boolean empty();//判断栈内是否为空
public int size(); //返回栈内的元素个数

import java.util.Stack;
public class DemoStack{
	public static void main(String[] args){
	Stack<Integer> stack = new Stack<>();
	System.out.println(stack.empty());
	stack.push(0);
	stack.push(1);
	stack.push(2);
	System.out.println(stack.size());
	System.out.println(stack.peek());
	System.out.println(stack.pop());
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过Java中的日期时间类 `LocalDate` 和 `LocalDateTime` 来实现该功能。 首先,我们需要将时间段转换为 `LocalDateTime` 对象,然后将时间部分设置为 00:00:00 或 23:59:59,最后遍历每一天,获取每一天的开始时间和结束时间。 以下是代码示例: ```java import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class TimeUtils { public static void main(String[] args) { String startStr = "2020-11-20 09:09:09"; String endStr = "2021-10-09 10:10:10"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime start = LocalDateTime.parse(startStr, formatter); LocalDateTime end = LocalDateTime.parse(endStr, formatter); // 将时间部分设置为 00:00:00 或 23:59:59 LocalDateTime startOfDay = start.with(LocalTime.MIN); LocalDateTime endOfDay = end.with(LocalTime.MAX); // 遍历每一天,获取每一天的开始时间和结束时间 LocalDate startDate = startOfDay.toLocalDate(); LocalDate endDate = endOfDay.toLocalDate(); while (!startDate.isAfter(endDate)) { LocalDateTime startOfDayOfDate = startDate.atStartOfDay(); LocalDateTime endOfDayOfDate = startDate.atTime(LocalTime.MAX); System.out.println("Start time of " + startDate + ": " + startOfDayOfDate); System.out.println("End time of " + startDate + ": " + endOfDayOfDate); startDate = startDate.plusDays(1); } } } ``` 输出结果如下: ``` Start time of 2020-11-20: 2020-11-20T00:00 End time of 2020-11-20: 2020-11-20T23:59:59.999999999 Start time of 2020-11-21: 2020-11-21T00:00 End time of 2020-11-21: 2020-11-21T23:59:59.999999999 ... Start time of 2021-10-09: 2021-10-09T00:00 End time of 2021-10-09: 2021-10-09T23:59:59.999999999 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值