【数据结构严蔚敏】 第三章 栈基本操作C语言实现
注意部分:
1.*S.top++ = e;
= *S=e ; S.top++ ;
若要实现指针所指地址的元素值++,语句应该是(*a)++
而不是*a++
2.关于指针
普通变量如 int a,&a表示变量a所在地址,a表示a所在地址中存储的值
指针变量如 int * a ,a表示a中存储的一个int型变量的地址,*a表示在a存储的地址中存储的值 ,&a依然表示该指针所在地址(不是a中存储的地址),。
2.关于free的问题
free与malloc语句对应,作用于指针,malloc为指针分配专用内存空间,使用free语句后,该内存空间不再为指针专有,它可能会被再次利用,但是指针所指仍然是这个地址,依然能够进行操作,所以在free后需要对指针置为NULL,防止误操作指针出现意外情况。
free(p);p=NULL;
配合使用
代码部分
vs2017
stack.h部分
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASLBLE -1
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef int Status;
typedef int SElemType;
typedef struct{
SElemType * base;
SElemType * top;
int stacksize;
}SqStack;
//构造一个空栈
Status InitStack(SqStack &S);
//销毁一个栈
Status DestroyStack(SqStack &S);
//清空一个栈
Status ClearStack(SqStack &S);
//若栈为空栈,则返回TRUE,否则返回FALSE
Status StackEmpty(SqStack &S);
//返回S的元素个数,即栈的长度
int StackLength(SqStack S);
//若栈不空,用e返回S的栈顶元素,并返回OK;否则返回ERROR
Status GeTop