チェーンスタックのC実装

2846 ワード

チェーンスタックはスタック空間が満たされている場合を考慮する必要はなく、アップフローは存在しない.
Linux上でwarningをコンパイルしてintとvoid*の間の変換を言っていますが、実際には32 bitsマシンでは両者の間で互いに変換することができますが、テストは64 bitsシステムでこのヒントがあります.皆さんはどんな良い解決方法がありますか?
実装コードは次のとおりです.
ヘッダファイル:
#ifndef LINK_STACK_H_INCLUDED
#define LINK_H_INCLUDED


typedef void* Element;
// top points to the top node of the stack
typedef struct l_stack_node
{
    Element data;
    struct l_stack_node *next;
}l_stack_node, *lnode;


typedef struct l_stack
{
    l_stack_node* top;
    int count;
}l_stack, *pstack;


pstack init_stack();
lnode init_lnode();
int is_empty(pstack ps);
Element get_top(pstack ps);
Element pop(pstack ps);
pstack push(pstack ps, Element e);
void display_stack(pstack ps);

#endif // LINK_STACK_H_INCLUDED

実装ファイル:
#include 
#include 
#include 
#include "link_stack.h"

#define TRUE        0
#define FALSE       1

pstack init_stack()
{
    pstack ps;
    if((ps = (pstack)malloc(sizeof(l_stack))) == NULL){
        printf("Init link stack error
"); return NULL; } ps->top = NULL; ps->count = 0; return ps; } lnode init_lnode() { lnode node; if((node = (lnode)malloc(sizeof(l_stack_node))) == NULL){ printf("Init link node error
"); } node->next = NULL; // if node points to NULL then return NULL return node; } int is_empty(pstack ps) { return ((ps->count <= 0)?TRUE : FALSE); } Element get_top(pstack ps) { if(is_empty(ps) == 0) { printf("Link stack is empty
"); return NULL; } else return ps->top->data; } int get_count(pstack ps) { if(ps != NULL) return ps->count; else return 0; } Element pop(pstack ps) { if(ps->count <= 0) return NULL; lnode n = ps->top; ps->top = n->next; ps->count--; return n->data; } pstack push(pstack ps, Element e) { lnode node = init_lnode(); node->data = e; node->next = ps->top; ps->top = node; ps->count++; return ps; } void display_stack(pstack ps) { lnode t = ps->top; if(is_empty(ps) == 0) printf("Link stack is empty
"); else { while(t != NULL) { printf("%d ", t->data); t = t->next; } printf("
"); } }

テストファイル:
#include 
#include 
#include "link_stack.h"

int main()
{
    int i;
    int arr[] = {1,2,3,4,5,6,7,8};
    int len = 8;
    pstack ps = init_stack();
    for(i=0; i