栈——郝斌版

/*
   2012年9月11日11:45:30
   了解栈的构造方法
 */
#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);        //压栈
bool empty(PSTACK);            //判断栈是否为空
void traverse(PSTACK);         //遍历栈
void pop(PSTACK);              //出栈
void clear(PSTACK);            //清空栈

int main()
{
	STACK S;
	int val;
	/*测试初始化栈及压栈函数*/
	init(&S);
	push(&S, 1);
	push(&S, 2);
	push(&S, 3);
	push(&S, 4);
	push(&S, 5);
	traverse(&S);
	/*测试出栈*/
	pop(&S);
	traverse(&S);
	/*测试清空栈*/
	clear(&S);
	traverse(&S);

	return 0;
}

/*初始化栈——使pTop和pBottom指向同一节点*/
void init(PSTACK pS)
{
	pS->pBottom = (PNODE)malloc(sizeof(NODE));
	if (pS->pBottom == NULL)
	{
		printf("动态内存分配失败!\n");
		exit(-1);
	}
	pS->pBottom->pNext = NULL;
	pS->pTop = pS->pBottom;
	return;
}
/*压栈——创建一个新节点,连到定节点上面,把新节点标记为顶节点*/
void push(PSTACK pS, int val)
{
	PNODE pNew;
	pNew = (PNODE)malloc(sizeof(NODE));
	if (NULL == pNew)
	{
		printf("动态内存分配失败!\n");
		exit(-1);
	}
	pNew->data = val;
	pNew->pNext = pS->pTop;
	pS->pTop = pNew;
	return;
}
/*判断栈是否为空*/
bool empty(PSTACK pS)
{
	if (pS->pTop == pS->pBottom)
		return true;
	else
		return false;
}
/*遍历栈——定义临时变量temp,从pTop开始一直往下指*/
void traverse(PSTACK pS)
{
	if (empty(pS))
		printf("栈为空 !\n");
	else
	{
		PNODE temp;
		temp = pS->pTop;
		printf("遍历栈:");
		while (temp != pS->pBottom)
		{
			printf("%d ", temp->data);
			temp = temp->pNext;
		}
		printf("\n");
	}
	return;
}
/*出栈—— pTop下移,且把原pTop占用的空间释放*/
void pop(PSTACK pS)
{
	if (empty(pS))
		printf("栈为空!\n");
	else
	{
		PNODE temp = pS->pTop;
		pS->pTop = pS->pTop->pNext;
		printf("被删除的栈的数据域为:%d\n", temp->data);
		free(temp);
	}
	return;
}
/*清空栈——类似出栈*/
void clear(PSTACK pS)
{
	if (empty(pS))
		printf("栈为空!\n");
	else
		while (pS->pTop != pS->pBottom)
		{
			PNODE temp = pS->pTop;
			pS->pTop = pS->pTop->pNext;
			free(temp);
		}
	return;
}

本文章迁移自http://blog.csdn.net/timberwolf_2012/article/details/7966528

/** * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/ /* var disqus_config = function () { this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable }; */ (function() { // DON'T EDIT BELOW THIS LINE var d = document, s = d.createElement('script'); s.src = 'https://chenzz.disqus.com/embed.js'; s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })();