go語言實現stack

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

golang

package stackimport (    "errors")type Stack []interface{}func(stack *Stack) Push(v interface{}) {    *stack = append(*stack, v)}func(stack *Stack) Pop() (interface{}, error){    if len(*stack) == 0 {         return nil, errors.New("stack empty")    }       v := (*stack)[len(*stack) - 1]    *stack = (*stack)[:len(*stack) - 1]    return v, nil }func(stack *Stack) Top() (interface{}, error) {    if len(*stack) == 0 {         return nil, errors.New("stack empty")    }       return (*stack)[len(*stack) - 1], nil }func(stack *Stack) Len() int {    return len(*stack)}


同樣的思路用c實現:

typedef struct my_stack_t my_stack_t;struct my_stack_t {    void **s;  /* 元素為void *的數組 */    int use;   /* 已存入的元素個數 */    int size;  /* 在記憶體中已指派的個數 */    void (*do_free)(void *);};#define DEFAULT_N 100int stack_init(my_stack_t *s, void (*do_free)()) {    assert(s != NULL);    s->s = (void **)malloc(sizeof(void *) * DEFAULT_N);    s->use = 0;    s->size = DEFAULT_N;    s->do_free = do_free;    return 0;}int stack_push(my_stack_t *s, void *v) {    assert(s != NULL);    char *p;     if (s->use == s->size) {        p = realloc(s->s, s->size * 2);         if (p == NULL)            return -1;         s->size *= 2;    }       s->s[s->use++] = v;    return 0;}void *stack_pop(my_stack_t *s) {    assert(s != NULL);    if (s->use == 0) {        return NULL;    }       return s->s[--s->use];}void *stack_top(my_stack_t *s) {    assert(s != NULL);    if (s->use == 0) {        return NULL;    }       return s->s[s->use - 1]; }int stack_len(my_stack_t *s) {    return s->use;}int stack_free(my_stack_t *s) {    void *v;    if (s->do_free == NULL) {        return 0;    }    while ((v = stack_pop(s)) != NULL) {        s->do_free(s);    }    return 0;}


*golang裡的interface{} 等同於c裡的void *

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.