数据结构严蔚敏 栈基本操作 C语言实现
生活随笔
收集整理的這篇文章主要介紹了
数据结构严蔚敏 栈基本操作 C语言实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【數(shù)據(jù)結(jié)構(gòu)嚴(yán)蔚敏】 第三章 棧基本操作C語(yǔ)言實(shí)現(xiàn)
注意部分:
1.*S.top++ = e;= *S=e ; S.top++ ;
若要實(shí)現(xiàn)指針?biāo)傅刂返脑刂?#43;+,語(yǔ)句應(yīng)該是(*a)++而不是*a++
2.關(guān)于指針
普通變量如 int a,&a表示變量a所在地址,a表示a所在地址中存儲(chǔ)的值
指針變量如 int * a ,a表示a中存儲(chǔ)的一個(gè)int型變量的地址,*a表示在a存儲(chǔ)的地址中存儲(chǔ)的值 ,&a依然表示該指針?biāo)诘刂?#xff08;不是a中存儲(chǔ)的地址),。
2.關(guān)于free的問題
free與malloc語(yǔ)句對(duì)應(yīng),作用于指針,malloc為指針分配專用內(nèi)存空間,使用free語(yǔ)句后,該內(nèi)存空間不再為指針專有,它可能會(huì)被再次利用,但是指針?biāo)溉匀皇沁@個(gè)地址,依然能夠進(jìn)行操作,所以在free后需要對(duì)指針置為NULL,防止誤操作指針出現(xiàn)意外情況。
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 //存儲(chǔ)空間初始分配量 #define STACKINCREMENT 10 //存儲(chǔ)空間分配增量typedef int Status; typedef int SElemType;typedef struct{SElemType * base;SElemType * top;int stacksize; }SqStack;//構(gòu)造一個(gè)空棧 Status InitStack(SqStack &S);//銷毀一個(gè)棧 Status DestroyStack(SqStack &S);//清空一個(gè)棧 Status ClearStack(SqStack &S);//若棧為空棧,則返回TRUE,否則返回FALSE Status StackEmpty(SqStack &S);//返回S的元素個(gè)數(shù),即棧的長(zhǎng)度 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);//從棧底到棧頂依次對(duì)棧中每個(gè)元素調(diào)用函數(shù)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++) { //圧入五個(gè)元素Push(S, i);}StackTraverse(S, visit); //遍歷棧,visit定義為輸出函數(shù)。cout <<endl<< "刪除棧頂元素" << endl;Pop(S, e); //刪除棧頂元素StackTraverse(S, visit);cout << endl << "輸出棧的元素個(gè)數(shù)" << endl;cout << StackLength(S)<<endl; //輸出棧的元素個(gè)數(shù)cout << "清空棧" << endl;ClearStack(S);cout << "判斷棧是否為空,1為空" << endl;cout << StackEmpty(S)<<endl;system("pause");return 0; }輸出結(jié)果
總結(jié)
以上是生活随笔為你收集整理的数据结构严蔚敏 栈基本操作 C语言实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [python3] pyton sock
- 下一篇: oracle 各种日期函数格式和操作