栈的基本实现(入栈,出栈,清空,判断是否为空)

#include 
#include 

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

typedef struct Stack {
	PNODE pTop;
	PNODE pBottom;
}STACK, *PSTACK;

void 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;
}

bool empty(PSTACK pS) {
	if(pS->pTop == pS->pBottom)
		return true;
	else
		return false;
}

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

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

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;
	}

}

int main(void)
{
	STACK S;
	int val;

	init(&S);
	push(&S, 1);
	push(&S, 2);
	push(&S, 3);
	push(&S, 4);
	push(&S, 5);
	push(&S, 6);
	traverse(&S);
	//clear(&S);   clear()清空栈
	if(pop(&S, &val))   //val用于保存出栈的数值
		printf("ok\n");
	else
		printf("error\n");
	
	traverse(&S);
	return 0;
}

代码整理自郝斌数据结构视频

你可能感兴趣的:(C语言,数据结构)