数据结构:链栈 代码实现

链栈

//和单链表相似,只不过只能在链表一侧进行增减元素
头文件

#include
//链栈---只能在表头插入删除 
#include

代码实现

typedef struct LinkNode{
	int data;
	struct LinkNode *next;
}*LiStack;  //栈类型定义 

void PrintStack(LiStack S){
	printf("LinkStack:\n");
	if(S==NULL)
		printf("空栈\n");
	LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
	p=S;
	int i=1;
	while(p!=NULL){
		printf("%d ",p->data);
		if(i%4==0)
			printf("\n");
		p=p->next;
		i++;
	}
	printf("\n");
	free(p);
}

bool InitStack_1(LiStack &S){
	//不带头结点
	S=NULL;
	return true; 
}

bool InitStack_2(LiStack &S){
	//带头节点
	S=(LinkNode *)malloc(sizeof(LinkNode));
	if(S==NULL)
		return false;
	S->next=NULL;
	return true;
}

bool Push_1(LiStack &S,int x){
	//不带头节点的入栈
	LinkNode *L=(LinkNode *)malloc(sizeof(LinkNode));
	L->data=x;
	L->next=NULL;
	if(S==NULL){
		S=L;
		return true;
	}
	L->next=S;
	S=L;
	return true;
}

bool Pop_1(LiStack &S){
	if(S==NULL){
		return false;
	}
	int x;
	x=S->data;
	S=S->next;
	return true;
}

bool GetElem(LiStack S){
	if(S==NULL){
		return false;
	}
	printf("栈顶元素是%d",S->data);
	return true;
}

bool Stack_Empty(LiStack S){
	if(S==NULL)
		return true;
	return false;
}


int main(void){
	LiStack S;
	InitStack_1(S);
	PrintStack(S);
	Push_1(S,2);
	Push_1(S,2);Push_1(S,1);Push_1(S,4);Push_1(S,6);Push_1(S,9);
	PrintStack(S);
	Pop_1(S);
	PrintStack(S);
	GetElem(S);
	free(S);
	return 0;
}

你可能感兴趣的:(笔记)