📄 stack.c
字号:
#ifndef STACK_INCLD
#define STACK_INCLD
#include<malloc.h>
#define STACK_SIZE sizeof(struct node)
#define DEBUG
#ifdef DEBUG
typedef int ElemType;
#endif
typedef struct node * Stack;
struct node{
ElemType data;
Stack top;
Stack next;
int length;
};
Stack Stack_pool;
int isInited=0;
void Stack_init();
Stack Stack_new();
void Stack_clear(Stack s);
void Stack_destroy(Stack s);
int Stack_empty(Stack s);
int Stack_Length(Stack s);
ElemType Stack_get(Stack s);
void Stack_push(Stack s,ElemType e);
ElemType Stack_pop(Stack s);
void Stack_init(){
if(!isInited){
isInited=1;
Stack_pool=Stack_new();
Stack_pool->length=0;
Stack_pool->top=Stack_pool;
}
}
Stack Stack_new(){
Stack temp;
Stack_init();
temp=(Stack)malloc(STACK_SIZE);
temp->length=0;
return temp;
}
void Stack_clear(Stack s){
Stack temp;
Stack_init();
s=s->top;
temp=Stack_pool->next;
while(temp->next)
temp=temp->next;
temp->next=s->next;
while(temp->next){
temp=temp->next;
temp->top=Stack_pool;
}
Stack_pool->length+=s->length;
s->length=0;
s->next=0;
}
void Stack_destroy(Stack s){
Stack_init();
Stack_clear(s);
Stack_pool=Stack_pool->top;
s->next=Stack_pool->next;
Stack_pool->next=s;
Stack_pool->length++;
s->top=Stack_pool;
}
int Stack_empty(Stack s){
Stack_init();
return s->length==0;
}
int Stack_length(Stack s){
Stack_init();
return s->length;
}
ElemType Stack_get(Stack s){
Stack_init();
return s->top->next->data;
}
void Stack_push(Stack s,ElemType e){
Stack temp;
Stack_init();
s=s->top;
if(!Stack_empty(Stack_pool)){
Stack_pool=Stack_pool->top;
temp=Stack_pool->next;
Stack_pool->next=temp->next;
Stack_pool->length--;
}else
temp=Stack_new();
temp->data=e;
temp->top=s;
if(!Stack_empty(s))
temp->next=s->next;
printf("hello");
s->next=temp;
s->length++;
}
ElemType Stack_pop(Stack s){
Stack temp;
s=s->top;
Stack_init();
if(Stack_empty(s))
return 0;
temp=s->next;
s->next=temp->next;
s->length--;
temp->top=Stack_pool;
temp->next=Stack_pool->next;
Stack_pool->next=temp;
Stack_pool->length++;
return temp->data;
}
#ifdef DEBUG
void prtStack(Stack s){
Stack temp=s->top;
while(temp->next){
temp=temp->next;
printf("==%d==\n",temp->data);
}
}
void main(){
int i;
Stack test;
printf("main(1)\n");
test=Stack_new();
printf("main(2)\n");
for(i=0;i<20;i++)
Stack_push(test,i);
prtStack(test);
for(i=0;i<10;i++)
Stack_pop(test);
prtStack(test);
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -