|
发表于 2012-8-28 18:32:32
|
显示全部楼层
虽然我没有 但我以前学数据结构时 , 我用c模拟的栈机制 相当于 push pop 这二个指令
希望对你有帮助
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define true 1
#define false 0
typedef int bool;
typedef struct node
{
int data;
struct node *pNext;
}NODE, *PNODE;
typedef struct Stack //栈
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;
void init_Stack(PSTACK PS);
void push_Stack(PSTACK PS, int val);
void traverse_Stack(PSTACK ps);
bool pop_Stack(PSTACK ps, int *val);
bool empty_Stack(PSTACK ps);
int main(void)
{
PSTACK S;
int val;
init_Stack(&S); //栈的初始化
push_Stack(&S, 1);
push_Stack(&S, 2); //压栈
traverse_Stack(&S); //遍历
if ( pop_Stack(&S, &val) )
{
printf("出栈失败!\n");
}
else
{
printf("出栈成功! 出栈:%d\n", val);
}
traverse_Stack(&S);//出栈
return 0;
}
void init_Stack(PSTACK ps)
{
ps->pTop = (PNODE)malloc(sizeof(NODE));
if (NULL == ps)
{
printf("分配内存失败! 程序终止!\n");
exit(-1);
}
ps->pBottom = ps->pTop;
ps->pTop->pNext = NULL;
return;
}
void push_Stack(PSTACK ps, int val)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == ps)
{
printf("分配内存失败! 程序终止!\n");
exit(-1);
}
pNew->data = val;
pNew->pNext = ps->pTop;
ps->pTop = pNew;
return;
}
void traverse_Stack(PSTACK ps)
{
PNODE r = ps->pTop;
while (r != ps->pBottom)
{
printf("%d ", r->data);
r = r->pNext;
}
printf("\n");
return;
}
bool pop_Stack(PSTACK ps, int *val)
{
if ( empty_Stack(ps) )
{
return true;
}
else
{
PNODE r = ps->pTop;
*val = r->data;
ps->pTop= r->pNext;
free(r);
r = NULL;
}
return false;
}
bool empty_Stack(PSTACK ps)
{
if (ps->pTop == ps->pBottom)
{
return true;
}
else
{
return false;
}
} |
|