今日学习任务:
初步了解数据结构,栈中存放的是数组,进出的顺序是:先进后出
线性结构的存储方式:1.顺序储存(连续)2.链式储存(不连续)
分别编写的程序是(1).初始化栈(2).进栈(3).出栈(4).判断栈是否空
(5).存取栈顶元素 (6).空栈
今日任务完成情况 :
1.初步掌握了C语言当中栈的相关知识。
2.学会了如何定义一个结构体变量。
3.编写了栈的相关函数。
4 程序编写困难,对栈的理解不够深刻,拼写错误。
5 头文件的第一句是为了防止同一个C文件中包含同一个头文件 。
今日开发中出现的问题汇总 :
栈的相关知识理解得还不是十分透彻。
今日开发收获:
学习栈的相关知识,并学会编写相关函数,对栈进行操作。
自我评价:
能够按时完成任务,跟上老师的步伐。
仍然需要继续努力。
程序代码 :
stack.h
#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
main.c
#include <stdio.h>
#include "stack.h"
int main()
{
S stack; //定义一个栈
int ret,i;
ret = InitStack(&stack); //初始化栈
if(SUCCESS == ret)
{
pintf("Init Success!\n");
}
else
{
printf("Init Failure!\n");
}
for(i=0;i<5;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;
}
stack.c
#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;
}