数据结构严蔚敏 栈基本操作 C语言实现
生活随笔
收集整理的这篇文章主要介绍了
数据结构严蔚敏 栈基本操作 C语言实现
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
【数据结构严蔚敏】 第三章 栈基本操作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(SqStack S, SElemType &e);//插入元素e为新的栈顶元素 Status Push(SqStack &S, SElemType &e);//若栈不空,删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR Status Pop(SqStack &S, SElemType e);//从栈底到栈顶依次对栈中每个元素调用函数visit()。一旦visit失败,操作失败 Status StackTraverse(SqStack S, Status(*visit)(SElemType*));stack.c部分
#include "stack.h"Status InitStack(SqStack & S) {S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base) exit(OVERFLOW);S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK; }Status DestroyStack(SqStack & S) {free(S.base);S.base = NULL; //free后需要将指针赋NULL,否则可能造成问题S.stacksize = 0;return OK; }Status ClearStack(SqStack & S) {S.top = S.base;return OK; }Status StackEmpty(SqStack & S) {if (S.base == S.top)return TRUE;return FALSE; }int StackLength(SqStack S) {return S.top-S.base; }Status GeTop(SqStack S, SElemType & e) { if (S.top == S.base) return ERROR;e = *(S.top - 1);return OK;}Status Push(SqStack & S, SElemType e) {if (S.top - S.base >= S.stacksize) {S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));if (!S.base)exit(OVERFLOW);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;}Status Pop(SqStack & S, SElemType &e) {if (S.base == S.top)return ERROR;e = *--S.top;return OK; }Status StackTraverse(SqStack S, Status(*visit)(SElemType*)) {SElemType *cur;cur = S.base;while (!(cur == S.top)) {if (!visit(cur)) return ERROR; cur++;}return OK; }test部分
#include<stdio.h> #include<stdlib.h> #include<iostream> #include"stack.h"int visit(SElemType* cur) {//显示元素值cout << *cur;return OK; } int main() {SqStack S;int e=0;InitStack(S); //初始化链表for (int i = 0; i < 5; i++) { //圧入五个元素Push(S, i);}StackTraverse(S, visit); //遍历栈,visit定义为输出函数。cout <<endl<< "删除栈顶元素" << endl;Pop(S, e); //删除栈顶元素StackTraverse(S, visit);cout << endl << "输出栈的元素个数" << endl;cout << StackLength(S)<<endl; //输出栈的元素个数cout << "清空栈" << endl;ClearStack(S);cout << "判断栈是否为空,1为空" << endl;cout << StackEmpty(S)<<endl;system("pause");return 0; }输出结果
总结
以上是生活随笔为你收集整理的数据结构严蔚敏 栈基本操作 C语言实现的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: [python3] pyton sock
- 下一篇: oracle 各种日期函数格式和操作