栈 链表的实现
2015-08-09 19:23
288 查看
链表是数据结构,按线性顺序排列,每个对象都有一个关键字和指针,
定义一个栈的链表
然后创建一个栈链表的话,首先先开辟相应的存储空间,
给对象赋予相应的值;
检验栈链表是不是空,就是看对象是不是存储数据,
然后在栈链表中压入数据:
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;
}
整体代码:
定义一个栈的链表
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; }删除其中的数据:
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;
}
整体代码:
#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;
}
相关文章推荐
- 第一周工作总结及计划表
- gerrit H2 数据库管理
- sdnu 1087.过河(NOIP 2005 提高组)DP状态压缩
- CS224d Problem set 2作业
- 《R语言实战》读书笔记--第三章 图形初阶(二)
- 区间覆盖
- (原)数据结构——线索二叉树
- B. Berland National Library
- Ubuntu 安装mysql和简单操作
- 如何实时查看linux下的日志
- uva 673 Parentheses Balance
- iOS开发--UIButton 设置圆角 边框颜色 点击回调方法
- CodeForces 492B
- 一步一步在ubuntu上安装即时通讯服务器-Openfire
- 提取最长转录本的代码
- 理解Scroll Views
- 重复子串问题(五):求最长回文字符子串
- 剑指offer刷题之java实现的二叉搜索树的后序遍历序列
- SYN 攻击 常识 预防
- 重写equals/clone