嵌入式課程設計——學習日誌 (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;
}

運行結果
這裏寫圖片描述

六.自我評價
只要多加練習一定可以孰能生巧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章