//链表
typedef struct NODE
{
int data;//数据域
struct NODE * next;//指针域
}* Node;
//栈
typedef struct STACK
{
Node top;//栈顶
Node bottom;//栈底
} * Stack;
//初始化
Stack init_stack();
//入栈
void push_stack(Stack stack,int data);
//出栈
void pop_stack(Stack stack,int * pData);
//遍历
void traverse_stack(Stack stack);
//清空
void clear_stack(Stack stack);
int main(int argc, const char * argv[]) {
Stack stack = init_stack();
push_stack(stack, 1);
push_stack(stack, 2);
push_stack(stack, 3);
push_stack(stack, 4);
// traverse_stack(stack);
// pop_stack(stack, NULL);
// traverse_stack(stack);
clear_stack(stack);
return 0;
}
//初始化
Stack init_stack()
{
Stack stack = (Stack)malloc(sizeof(Stack));
stack->top = (Node)malloc(sizeof(Node));
if (stack->top == NULL) {
printf("分配内存失败");
exit(-1);
}else
{
stack->bottom = stack->top;
stack->top->next = NULL;
}
return stack;
}
//入栈
void push_stack(Stack stack,int data)
{
Node new = (Node)malloc(sizeof(Node));
new->data = data;
//每次新建节点指向栈顶
new->next = stack->top;
//栈顶指向新节点
stack->top = new;
}
//出栈
void pop_stack(Stack stack,int * pData)
{
if (stack->top == stack->bottom) {
printf("已经是空栈,不能出栈");
exit(-1);
}
pData = &stack->top->data;
Node p = stack->top;
stack->top = p->next;
free(p);
p = NULL;
}
//遍历
void traverse_stack(Stack stack)
{
Node p = stack->top;
while (p != stack->bottom) {
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
//清空
void clear_stack(Stack stack)
{
if (stack->top == stack->bottom) {
return;
}else
{
Node p = stack->top;
Node q;
while (p != stack->bottom) {
q = p->next;
free(p);
p = q;
}
stack->top = stack->bottom;
}
}
栈的链式存储结构
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 太长了,还是转载吧...今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源...
- Android中国开发精英目前包括: Android开源项目第一篇——个性化控件(View)篇 包括ListV...
- 得到《超级个体》栏目今天谈及的是“短板已死、优势永生”的话题,投资长板与优势对人生的发展而言至关重要。与此同时,也...