C語言:泛型棧的一次嘗試__C語言

來源:互聯網
上載者:User

嘗試了用C做一個泛型的棧,拋出來跟大家交流一下。

#include <stdio.h>/** * Make a struct for stacks. *I hope to make a generic struct of stacks. *I may have a try. * *//** Two variables: *01.pointer to char. *02. the position of the stack. *from 0 to MAX *03. the length of the array of char which is malloc.; */typedef struct Stack *StackSP;struct Stack{void *pt;size_t top;size_t length;};/**function judge whether stack is empty.  *argument sp is a pointer to Stack. * *should be aware that top is equal to zero while stack is empty. */#define size_t ifempty(StackSP sp)  sp->top/**Push an element into the top of the stack. */#define push(vartype, stacksp, value)\if(stacksp->top == stacksp->length) fprintf(stderr,"error : stack is full.");\((vartype *)stacksp->pt)[stacksp->top++] = value ;/**Pop()function return  an element from the top of the stack. *Warning : the element is also an pointer to void. * so you cannot referrence the variable by this pointer, * you show make some conventions. */#define pop(vartype, stacksp)\(stacksp->top == 0) ? NULL : (((vartype *) stacksp->pt)[--stacksp->top])/**Free the space applied. */#define closestack(vartype, stacksp) if(stacksp->pt == NULL){\free((vartype *)stacksp->pt);\stacksp->top = 0;}/**Malloc a space for stack. ***/#define openstack(vartype,stacksp,op_length)  \stacksp->pt = malloc(sizeof(vartype) * op_length );\stacksp->length  = op_length; \stacksp->top = 0;


 

 

編譯時間爆出幾個warning,顯然用C做泛型還是有些不理智。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.