天天看點

劍指offer--2

前言:繼續筆記分享!

面試題6:暫無好的解決方法先擱淺一下

面試題7:

劍指offer--2

#include<stdio.h>
#include<stdlib.h>

typedef struct LIFO{
    int *data;
    int maxlen;
    int top;
}seqstack_t;
typedef struct LIFO1{
    int *data;
    int maxlen;
    int top;
}seqstack_t1;

//建立一個空棧
seqstack_t *CreateStack(int max)
{
    seqstack_t *H;
    H = (seqstack_t *)malloc(sizeof(seqstack_t));
    H->data = (int *)malloc(sizeof(int)*max);
    H->maxlen = max;
    H->top = 0;
    return H;
}
//建立一個空棧
seqstack_t1 *CreateStack1(int max)
{
    seqstack_t1 *H;
    H = (seqstack_t1 *)malloc(sizeof(seqstack_t1));

    H->data = (int *)malloc(sizeof(int)*max);
    H->maxlen = max;
    H->top = 0;
    return H;
}

//擷取棧頂資料的值
int GetTop(seqstack_t1 *H)
{
    if(H->top <= 0)
    {
            printf("棧空\n");
            return -1;
    }
    return H->data[H->top-1];
}

//棧清空
void Clear(seqstack_t *H)
{
    H->top=0;
}

//向棧中插入資料
void Push(seqstack_t *H,int m)
{
    H->data[H->top]=m;
    H->top++;
}
//向棧中插入資料
void Push1(seqstack_t1 *H,int m)
{
    H->data[H->top]=m;
    H->top++;
}

int Pop(seqstack_t *H)
{
    return H->data[H->top];
}

int main()
{
    seqstack_t *T=CreateStack(10);
    seqstack_t1 *T1=CreateStack1(10);
    Push(T,1);
    Push(T,2);
    Push(T,3);
    
    int i=0;
    --T->top;
    while(T->top >= 0)
    {                
        Push1(T1,Pop(T));       
        i++;
        --T->top;
      }        
    while(T1->top > 0)
    {
        printf("data:%-5d",GetTop(T1));        
        --T1->top;
      }    
    printf("\n");

    free(T->data);
    free(T);
    free(T1->data);
    free(T1);
    return 0;
}      

注:主要要懂棧後進先出LIFO,隊列先進先出FIFO,一個棧彈出,一個壓入,就可以實作隊列!!!

作者:

柳德維

出處:

https://www.cnblogs.com/liudw-0215/

-------------------------------------------

個性簽名:獨學而無友,則孤陋而寡聞。做一個靈魂有趣的人!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,部落客在此感謝!

萬水千山總是情,打賞一分行不行,是以如果你心情還比較高興,也是可以掃碼打賞部落客,哈哈哈(っ•̀ω•́)っ⁾⁾!

繼續閱讀