【数据结构】栈的实现

前端之家收集整理的这篇文章主要介绍了【数据结构】栈的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

栈可以看做是链表的一种特殊形式,是在链表上加不同的约束条件实现的。


# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>


typedef struct Node{
	int data;
	struct Node * pNext;
	
}NODE,*PNODE;

typedef struct Stack{
	PNODE pTop;
	PNODE pBottom;

}STACK,* PSTACK;

void init(PSTACK);
void push(PSTACK,int);
void traverse(PSTACK);
bool pop(PSTACK,int*);

int main(void){
	STACK S;//STACK 等价于 struct Stack

	init(&S);
	push(&S,1);
	push(&S,2);
	//traverse(&S);
	system("Pause");
	return 0;
}

int init(PSTACK pS){

	pS->pTop = (PNODE)malloc(sizeof(NODE));

	if (NULL == pS->pTop){
		printf("动态内存分配失败\n");
		exit(-1);
	}
	else{
		pS->pBottom = pS->pTop;
		pS->pTop->pNext = NULL;
	}
}

void push(PSTACK pS,int val){
	PNODE pNew = (PNODE)malloc(sizeof(NODE));
	pNew->data = val;
	pNew->pNext = pS->pTop;
	pS->pTop = pNew;
}

void traverse(PSTACK pS){
	PNODE p = pS->pTop;

	while (p!=pS->pBottom){
		printf("%d",p->data);
		p = p->pNext;
	}
	printf("\n");
	
}

bool empty(PSTACK pS){
	if (pS->pTop == pS->pBottom){

		return true;
	}
	return false;
}

bool pop(PSTACK pS,int *val){
	PNODE	r;
	if (!empty(pS)){
		r = pS->pTop;
		*val = r->data;
		pS->pTop = pS->pTop->pNext;
		free(r);
		r = NULL;
		return true;
	}
	return false;
}

void clear(PSTACK pS){
	if (empty(pS)){
		return ;
	}
	else{
		PNODE p = pS->pTop;
		PNODE q = NULL;
		while ( p !=pS->pBottom){
			q = p->pNext;
			free(p);
			p = q;
		}
		pS->pTop = pS->pBottom;
	}
}

猜你在找的数据结构相关文章