⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.c

📁 自动生成的数据的一个栈,其中有用到数组的,但这个算法应该还有改进的余地,希望你们能有所发现.
💻 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 + -