数据结构之栈和队列---栈的基本操作
2015-08-03 16:47
453 查看
问题:实现栈的基本操作,内容包括栈的结构体,栈的初始化,栈的销毁,进栈操作及出栈操作
//结构体
typedef struct MyStack
{
ElemType *top;
ElemType *base;
int stacksize;
}MyStack;//栈的初始化
MyStack* InitStack()
{
MyStack *stack;
stack = (MyStack *)malloc(sizeof(MyStack));
stack->stacksize = INIT_SIZE;
stack->base = (ElemType *)malloc(sizeof(ElemType)*INIT_SIZE);
stack->top = stack->base;
return stack;
}//栈的销毁
//本文中栈使用顺序存储结构实现,因此判断栈满时直接使用栈顶减去栈底进行判断
//但是比较时要注意元素类型所占空间,
//例如double型变量需要用栈的大小乘上8(即double类型变量的大小)
int PushStack(MyStack *stack, ElemType elem)
{
if(stack->top-stack->base>=stack->stacksize*sizeof(ElemType))
{
printf("栈已满,无法添加新元素\n");
return -1;
}
*stack->top = elem;
++ stack->top;
return 0;
}//出栈操作
//出栈主要注意top指向的是当前元素位置,还是下一个元素位置
int PopStack(MyStack *stack, ElemType *elem)
{
if(stack->top==stack->base)
{
printf("栈中没有元素\n");
return -1;
}
*elem = *(--stack->top);
return 0;
}
很久不用C语言编程了,编程时遇到这样一个情况,
在编写纯C语言时,函数中是不能使用引用参数的,只能使用指针
//结构体
typedef struct MyStack
{
ElemType *top;
ElemType *base;
int stacksize;
}MyStack;//栈的初始化
MyStack* InitStack()
{
MyStack *stack;
stack = (MyStack *)malloc(sizeof(MyStack));
stack->stacksize = INIT_SIZE;
stack->base = (ElemType *)malloc(sizeof(ElemType)*INIT_SIZE);
stack->top = stack->base;
return stack;
}//栈的销毁
void DestroyStack(MyStack *stack) { if(stack!=NULL) { free(stack->base); free(stack); } }//进栈操作
//本文中栈使用顺序存储结构实现,因此判断栈满时直接使用栈顶减去栈底进行判断
//但是比较时要注意元素类型所占空间,
//例如double型变量需要用栈的大小乘上8(即double类型变量的大小)
int PushStack(MyStack *stack, ElemType elem)
{
if(stack->top-stack->base>=stack->stacksize*sizeof(ElemType))
{
printf("栈已满,无法添加新元素\n");
return -1;
}
*stack->top = elem;
++ stack->top;
return 0;
}//出栈操作
//出栈主要注意top指向的是当前元素位置,还是下一个元素位置
int PopStack(MyStack *stack, ElemType *elem)
{
if(stack->top==stack->base)
{
printf("栈中没有元素\n");
return -1;
}
*elem = *(--stack->top);
return 0;
}
很久不用C语言编程了,编程时遇到这样一个情况,
在编写纯C语言时,函数中是不能使用引用参数的,只能使用指针
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 探索PowerShell (二) PowerShell的基本操作
- C#数据结构揭秘一
- C++基于栈实现铁轨问题
- 数据结构之Treap详解
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- JavaScript数据结构和算法之图和图算法
- Array栈方法和队列方法的特点说明
- SQLite数据库安装及基本操作指南
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- javascript 学习笔记(一)DOM基本操作
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例