麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

C語言數(shù)據(jù)結(jié)構(gòu) 棧的基礎(chǔ)操作

2020-02-24 14:25:16
字體:
供稿:網(wǎng)友

堆棧是處理程序運行的一種方式,在C語言實現(xiàn)的堆棧代碼,今天就由武林技術(shù)頻道小編介紹C語言數(shù)據(jù)結(jié)構(gòu) 棧的基礎(chǔ)操作吧,希望對你學習這方面知識有幫助。

C語言數(shù)據(jù)結(jié)構(gòu) 棧的基礎(chǔ)操作

實現(xiàn)了棧的基本操作,包括入棧出棧,以及書上沒有寫的銷毀棧等操作,并對代碼進行了詳細的注釋

MyStack.h

/* * Include.h * * Created on: 2016.11.23 *   Author: Jack Cui */#ifndef MYSTACK_H_#define MYSTACK_H_#include <stdlib.h>#include <stdio.h>#include <malloc.h> /*棧(Stack)是限定僅在表尾進行插入或刪除操作的線性表**棧頂(top)和棧底(bottom)相等,代表為空棧***///SElemType是某個確定的、將由用戶自行定義的、含某個關(guān)系運算的數(shù)據(jù)對象typedef int SElemType;//函數(shù)結(jié)果狀態(tài)代碼#define TRUE    1  #define FALSE    0#define OK     1#define ERROR    0#define INFEASIBLE -1   //不可行#define MY_OVERFLOW -2   //溢出/**********棧的順序存儲表示**********/#define STACK_INIT_SIZE 100   //存儲空間初始分配量#define STACKINCREMENT 10   //存儲空間分配增量typedef struct{  SElemType *base;  //在棧構(gòu)造之前和銷毀之后,base的值為NULL  SElemType *top;   //棧頂指針  int stacksize;   //當前已分配}SqStack;/**********基本操作的函數(shù)原型說明**********///構(gòu)造一個空棧SStatus InitStack(SqStack &S);      //銷毀棧S,S不再存在Status DestroyStack(SqStack &S);//把S置為空棧Status ClearStack(SqStack &S);//若棧S為空棧,則返回TURE,否則返回FALSEStatus StackEmpty(SqStack S); //返回S的元素個數(shù),即棧的長度int StackLength(SqStack S);//若棧不空,則用e返回S的棧頂元素,并返回OK;否則返回ERRORStatus GetTop(SqStack S, SElemType &e); //插入元素e為新的棧頂元素Status Push(SqStack &S, SElemType e);//若棧不空,則刪除S的棧頂元素,用e新棧頂?shù)闹担⒎祷豋K;否則返回ERROR;Status Pop(SqStack &S, SElemType &e);//從棧底到棧頂依次對棧中每個元素調(diào)用函數(shù)visit();一旦visit()失敗,則操作失敗Status StackTraverse(SqStack S, Status(* visit)(SElemType));//visit()函數(shù)Status visit(SElemType e);//測試函數(shù)Status TestMyStack();#endif MYSTACK_H_

MyStack.c

#include "MyStack.h"Status InitStack(SqStack &S){  //構(gòu)造一個空棧S  S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));  if(!S.base){    //存儲分配失敗    printf("InitStack: malloc err/n");    exit(MY_OVERFLOW);  }  S.top = S.base;  S.stacksize = STACK_INIT_SIZE;  return OK;}//InitStackStatus DestroyStack(SqStack &S){  if(!S.base){    printf("DestroyStack: Stack does not exist/n");    exit(MY_OVERFLOW);  }//在調(diào)用malloc的時候,系統(tǒng)會記住你申請的這塊連續(xù)空間的起始地址以及這塊空間的大小,//釋放free的時候,只要把這個起始地址告訴系統(tǒng),系統(tǒng)自然就知道要釋放多大的空間。  free(S.base);      S.top = NULL;  S.base = NULL;  S.stacksize = 0;  return OK;}//DestroyStackStatus ClearStack(SqStack &S){  if(!S.base){    printf("ClearStack: Stack does not exist/n");    exit(MY_OVERFLOW);  }  S.top = S.base;   return OK; }//ClearStackStatus StackEmpty(SqStack S){  if(S.top == S.base){    return TRUE;  }  else{    return FALSE;  }}//StackEmptyint StackLength(SqStack S){  return S.top - S.base;}//StackLengthStatus GetTop(SqStack S, SElemType &e){  ////若棧不空,則用e返回S的棧頂元素,并返回OK;否則返回ERROR  if(S.top == S.base){    printf("GetTop: Stack is empty/n");    return ERROR;  }  e = *(S.top - 1);  return OK;}//GetTopStatus Push(SqStack &S, SElemType e){  //插入元素e為新的棧頂元素  if(S.top - S.base >= S.stacksize){ //棧滿,追加存儲空間    S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));    if(!S.base){      printf("Push: realloc error/n");    }    S.top = S.base + S.stacksize;    S.stacksize += STACKINCREMENT;  }  *S.top++ = e;    //*S.top = e; S.top++;  return OK;}//PushStatus Pop(SqStack &S, SElemType &e){  //若棧不空,則刪除S的棧頂元素,用e返回新棧頂?shù)闹担⒎祷豋K,否則返回ERROR;  if(S.top == S.base){    printf("Pop: Stack is empty/n");    return ERROR;  }  e = *--S.top;    //S.top--; e = *S.top;  return OK;}//PopStatus StackTraverse(SqStack S, Status(* visit)(SElemType)){  while(S.top > S.base){    visit(*S.base++);   }   printf("/n");  return OK; }//StackTraverseStatus visit(SElemType e){  printf("%d ",e) ;  return OK;}//visitStatus TestMyStack(){  SElemType j;   SqStack s;   SElemType e;   if(InitStack(s) == OK)   for(j = 1; j <= 12; j++)   {     Push(s,j);   }   printf("棧中的元素依次為:");   StackTraverse(s,visit);   Pop(s, e);   printf("彈出的棧頂元素 e=%d/n", e);   printf("棧空否:%d(1:是 0:否)/n", StackEmpty(s));   GetTop(s, e);   printf("棧頂元素 e=%d,棧的長度為%d/n", e, StackLength(s));   ClearStack(s);   printf("清棧后,棧是否為空:%d(1:空 0:否)/n",StackEmpty(s));   DestroyStack(s);   printf("銷毀棧后,s.top = %u s.base= %u s.stacksize=%d/n",s.top,s.base,s.stacksize);   return 0; }//TestMyStack//主函數(shù)int main(){  TestMyStack();  system("pause");  return 0;}

運行結(jié)果

以上這些是武林技術(shù)頻道小編給大家介紹的C語言數(shù)據(jù)結(jié)構(gòu) 棧的基礎(chǔ)操作,希望對大家學習這方面知識有所幫助,更多相關(guān)信息,敬請留意js.Vevb.com。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 中文字幕精品一二三四五六七八 | 亚洲一区 国产 | 国产亚洲高清视频 | 国产一国产一级毛片视频 | 九九久久视频 | 久久久久久久亚洲视频 | 亚洲第一色片 | 蜜桃麻豆视频 | 成人激情视频网站 | 成人免费区| 免费国产一级淫片 | 亚洲导航深夜福利涩涩屋 | 欧美成人黄色 | 亚洲一区 国产 | 日本黄色一级视频 | 欧美成人高清视频 | 国产手机av在线 | 嗯~啊~弄嗯~啊h高潮视频 | 成人福利在线播放 | 亚洲一区二区中文 | 午夜精品福利视频 | 色啪综合 | wwwxxx视频 | 精品国产一区二区三区在线观看 | 一区二区三区视频在线观看 | 成人免费一区二区三区 | 成人在线视频在线观看 | 玩偶姐姐 在线观看 | 激情视频在线播放 | 色羞羞 | 色播久久 | 国产在线观看91精品 | 国产成人在线观看免费网站 | 18欧美性xxxx极品hd | 精品伊人 | 亚洲国产精品一区二区三区 | 深夜影院一级毛片 | 免费网站看毛片 | 欧美视频国产 | 91九色免费视频 | 久久99精品久久久久久236 |