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