
题目
用链表实现栈
解决代码及点评
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include<assert.h>
typedef struct Stack
{
int nValue;
struct Stack *pNext;
}Stack, *PStack;
PStack CreateStack()
{
PStack pStack = (PStack)malloc(sizeof(Stack));
pStack->nValue = 0;
pStack->pNext = NULL;
return pStack;
}
bool IsEmpty(PStack pStack)
{
if(NULL == pStack)
{
printf("栈未创建成功!\n");
}
return pStack->pNext == NULL;
}
PStack PushStack(PStack pStack, int nValue)
{
if(NULL == pStack)
{
printf("栈未创建成功!\n");
return NULL;
}
PStack pTmp = (PStack)malloc(sizeof(Stack));
pTmp->nValue = nValue;
pTmp->pNext = pStack->pNext;
pStack->pNext = pTmp;
return pStack;
}
//这里每次都会删除链表中的一个结点 所以不用传递PStack *pStack;
int PopStack(PStack pStack)
{
if(NULL == pStack)
{
printf("栈未创建成功!\n");
}
PStack pTmp = pStack->pNext;
pStack->pNext = pTmp->pNext;
int nValue = pTmp->nValue;
free(pTmp);
return nValue;
}
void Destroy(PStack pStack)
{
while (!IsEmpty(pStack))
{
PopStack(pStack);
}
free(pStack);
pStack = NULL;
}
int main()
{
PStack pStack = CreateStack();
for (int i = 0; i < 10; i++)
{
pStack = PushStack(pStack, i);
}
while (!IsEmpty(pStack))
{
printf("%d ", PopStack(pStack));
}
Destroy(pStack);
system("pause");
return 0;
}
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6858815
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果