嵌入式课程设计——学习日志 (2)

日期: 2018-9-11

一.今日任务
学习数据结构中的树形结构和线性结构,线性结构存储方式分为:顺序存储(连续)、链式存储(不连续)。主要学习线性结构中的栈(先进后出,如图所示),分为:初始化栈、进栈、出栈、判断栈是否为空、获取栈顶元素、清空栈的相关函数编写。
这里写图片描述

二.今日任务完成情况
今日任务已按计划完成,上课代码全部正常运行,今日代码量:200。

三.今日开发中出现的问题汇总
对函数的传值和传址不够熟悉,对指针的移动不够熟练,还学要仔细思考、多加练习。

四.今日未解决问题
对结构体的使用通过指针访问结构体成员变量还不熟悉,需要多练。

五.今日开发收获
学会如何定义一个新的头文件,主要由三部分组成:

#ifndef STACK_H
#define STACK_H
// 相关语句块
#endif

1.当预处理时把头文件展开放到c文件下,第一条语句用于防止同一个c程序重复包含同一个头文件。
2.栈的操作流程如下:
栈的头文件定义

#ifndef STACK_H
#define STACK_H

#define MAXSIZE 10
#define SUCCESS 1000
#define FAILURE 1001

struct stack{
int data[MAXSIZE];  //数组
int top;            //栈顶指针(数组下标)
};
typedef struct stack S; //重新定义
#endif

初始化栈

 #include"stack.h"
 #include<stdlib.h>
 int InitStack(S *s)
 {
     if (NULL == s)//入参判断
     {
         return FAILURE;
     }
     s->top = -1;//空栈,栈顶指针为-1
     return SUCCESS;
 }

进栈

int push(S *s,int e)
{
     if (NULL == s) //入参判断
     {
         return FAILURE;
     }
 
     if(s->top == MAXSIZE - 1)   //栈满
     {
         return FAILURE;
     }
     s->data[s->top + 1] = e;
     s->top++;
     return SUCCESS;
}

出栈

int pop(S *s)   //出栈
 {
     if (NULL == s)  //入参判断
     {
         return FAILURE;
     }
     if (-1 ==s->top)    //空栈
     {
         return FAILURE;
     }
     int e = s->data[s->top];    //记录栈顶元素
     s->top--;
     return e;	//返回栈顶元素
}

判断栈是否为空

int EmptyStack(S s)
{
     return (s.top == -1) ? SUCCESS : FAILURE;
}

获取栈顶元素

int GetTop(S s)
 {
     if (s.top == -1)
     {
         return FAILURE;
     }
     return s.data[s.top];
 }

清空栈

int ClearStack(S *s)
{
     if (NULL == s)
     {
         return FAILURE;
     }
     s->top = -1;
     return SUCCESS;
}

主函数的调用

#include<stdio.h>
#include"stack.h"

int main()
{
	S stack;//定义一个栈
	int ret, i;
	ret = InitStack(&stack);//初始化栈
	if (SUCCESS == ret)
	{
		printf("Init Success!\n");
	}
	else
	{
		printf("Init Failure!\n");
	}
	for (i = 0; i < 10; i++)
	{
		ret = push(&stack, i + 1);
		if (SUCCESS == ret)
		{
			printf("push %d success!\n",i + 1);
		}
		else
		{
			printf("push failure!\n");
		}
	}


	for (i = 0; i <  3; i++)
	{
		ret = pop(&stack);
		if(ret == FAILURE)
		{
			printf("pop failure!\n");
		}
		else
		{
			printf("pop %d success!\n",ret);
		}
	}

	ret = EmptyStack(stack);
	if (ret == SUCCESS)
	{
		printf("stack is empty!\n");
	}
	else
	{
		printf("stack is not empty!\n");
	}


	ret = GetTop(stack);
	if (ret == FAILURE)
	{
		printf("Get Top Failure!\n");
	}
	else
	{
		printf("Top %d\n",ret);
	}

	ret = ClearStack(&stack);
	if(ret == FAILURE)
	{
		printf("clear failure!\n");
	}
	else
	{
		printf("clear success!\n");	
	}

	ret = EmptyStack(stack);
	if (ret == SUCCESS)
	{
		printf("stack is empty!\n");
	}
	else
	{
		printf("stack is not empty!\n");
	}
	return 0;
}

运行结果
这里写图片描述

六.自我评价
只要多加练习一定可以孰能生巧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值