亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

詳解C語言棧的表示與實現方法

2020-02-24 14:29:51
字體:
來源:轉載
供稿:網友

堆棧是數據結構的一種,它是計算機程序運行的一種方式,堆棧具有先進、后出的特點,下面是武林技術頻道小編為大家介紹的詳解C語言棧的表示與實現方法,一起進入下文看看吧!

1.基本概念:

C語言的棧是指限定僅在表尾進行插入和刪除操作的線性表。
棧作為C語言中一種常用的數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進后出的原則存儲數據,先進入的數據被壓入棧底,最后的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。

棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進先出表。

在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。

棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:

(1)函數的返回地址和參數
(2)臨時變量:包括函數的非靜態局部變量以及編譯器自動生成的其他臨時變量

2.實現代碼:

#define STACK_INIT_SIZE 10 /* 存儲空間初始分配量 */ #define STACKINCREMENT 2 /* 存儲空間分配增量 */ typedef struct SqStack {  SElemType *base; /* 在棧構造之前和銷毀之后,base的值為NULL */  SElemType *top; /* 棧頂指針 */  int stacksize; /* 當前已分配的存儲空間,以元素為單位 */ }SqStack; /* 順序棧 */Status InitStack(SqStack *S) { /* 構造一個空棧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) { /* 銷毀棧S,S不再存在 */  free((*S).base);  (*S).base=NULL;  (*S).top=NULL;  (*S).stacksize=0;  return OK; } Status ClearStack(SqStack *S) { /* 把S置為空棧 */  (*S).top=(*S).base;  return OK; } Status StackEmpty(SqStack S) { /* 若棧S為空棧,則返回TRUE,否則返回FALSE */  if(S.top==S.base)   return TRUE;  else   return FALSE; } int StackLength(SqStack S) { /* 返回S的元素個數,即棧的長度 */  return S.top-S.base; } Status GetTop(SqStack S,SElemType *e) { /* 若棧不空,則用e返回S的棧頂元素,并返回OK;否則返回ERROR */  if(S.top>S.base)  {   *e=*(S.top-1);   return OK;  }  else   return ERROR; } Status 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)    exit(OVERFLOW); /* 存儲分配失敗 */   (*S).top=(*S).base+(*S).stacksize;   (*S).stacksize+=STACKINCREMENT;  }  *((*S).top)++=e;  return OK; } Status Pop(SqStack *S,SElemType *e) { /* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */  if((*S).top==(*S).base)   return ERROR;  *e=*--(*S).top;  return OK; } Status StackTraverse(SqStack S,Status(*visit)(SElemType)) { /* 從棧底到棧頂依次對棧中每個元素調用函數visit()。 */  /* 一旦visit()失敗,則操作失敗 */  while(S.top>S.base)   visit(*S.base++);  printf("/n");  return OK; } #include"c1.h" typedef int SElemType; /* 定義棧元素類型,此句要在c3-1.h的前面 */ #include"c3-1.h" #include"bo3-1.c" Status visit(SElemType c) {  printf("%d ",c);  return OK; } void main() {  int 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); }

以上就是關于詳解C語言棧的表示與實現方法,如果你還想了解更多別的編程信息,建議你可以來武林技術頻道學習,我們一定不會讓你失望的。?

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产电影| 久久久久久久久网站| 亚洲区免费影片| 精品视频9999| 日韩在线一区二区三区免费视频| 日韩中文字幕久久| 在线看福利67194| 日韩欧美一区二区三区| 日韩精品极品视频免费观看| 亚洲国产精品一区二区久| 日韩网站免费观看高清| 88国产精品欧美一区二区三区| 久久精品中文字幕电影| 国产在线一区二区三区| 91精品国产乱码久久久久久蜜臀| 岛国视频午夜一区免费在线观看| 国产精品白丝jk喷水视频一区| 欧美激情精品久久久久久蜜臀| 亚洲欧美资源在线| 热99在线视频| 青草热久免费精品视频| 国产精品久久久久久亚洲影视| 亚洲激情电影中文字幕| 成人性生交大片免费看小说| 欧美中文字幕在线播放| 成人午夜激情免费视频| 国产亚洲精品一区二555| 国产精品网址在线| 国产精品人人做人人爽| 欧美日韩国产精品| 国产成人小视频在线观看| 日韩成人在线免费观看| 久久国产精品久久国产精品| 九九热这里只有精品免费看| 亚洲精品自拍第一页| 亚洲精品视频免费在线观看| 国产视频精品一区二区三区| 日韩av片免费在线观看| 国产精品欧美亚洲777777| 国产精品成人aaaaa网站| 国产精品午夜国产小视频| 国产精品成人国产乱一区| 九九精品在线播放| 国产v综合v亚洲欧美久久| 国产精品日韩一区| 国产欧美婷婷中文| 日韩第一页在线| 97精品伊人久久久大香线蕉| 北条麻妃99精品青青久久| 日韩毛片在线观看| 亚洲免费电影在线观看| 国产在线高清精品| 国产欧美va欧美va香蕉在| 亚洲视频专区在线| 久久久久久18| 4444欧美成人kkkk| 国产在线视频2019最新视频| 久久69精品久久久久久久电影好| 久久视频在线播放| 97**国产露脸精品国产| 欧美一级bbbbb性bbbb喷潮片| 美女扒开尿口让男人操亚洲视频网站| 国产午夜精品理论片a级探花| 亚洲美女精品成人在线视频| 亚洲国产高清自拍| 日韩精品在线视频美女| 久久av红桃一区二区小说| 久久久国产视频| 国产精品18久久久久久麻辣| 亚洲品质视频自拍网| 在线午夜精品自拍| 最好看的2019年中文视频| 久久天天躁狠狠躁夜夜av| 欧美激情一级二级| 亚洲视频在线观看免费| 亚洲第一网站男人都懂| 欧美激情免费看| zzijzzij亚洲日本成熟少妇| 亚洲新声在线观看| 色七七影院综合| 在线播放日韩专区| 伊人久久大香线蕉av一区二区| 亚洲精品suv精品一区二区| 欧美日韩国产综合视频在线观看中文| 日韩一区二区三区xxxx| 欧美激情视频在线观看| 亚洲91精品在线| 欧洲午夜精品久久久| 国语自产精品视频在线看一大j8| 91精品国产91久久久久福利| 中文字幕在线成人| 在线观看欧美日韩| 亚洲成人动漫在线播放| 性欧美xxxx视频在线观看| 国内精久久久久久久久久人| 欧美午夜视频在线观看| 国产91精品最新在线播放| 97不卡在线视频| 国产成人在线亚洲欧美| 日韩中文在线视频| 国产日韩欧美一二三区| 88国产精品欧美一区二区三区| 久久久久久午夜| 精品久久中文字幕久久av| 久久不射热爱视频精品| 国产精品青草久久久久福利99| 亚洲在线观看视频网站| 欧美一乱一性一交一视频| 成人精品视频久久久久| 97免费视频在线| 国产精品xxx视频| 亚洲成人久久网| 久久久久久久久久婷婷| 久久久精品久久久久| 国产国产精品人在线视| 国产综合色香蕉精品| 久久人人爽人人爽人人片av高清| 亚洲第一福利网| 国产亚洲一区二区精品| 亚洲成在人线av| 日韩美女免费线视频| 亚洲一区二区三区777| 不卡中文字幕av| 91国产视频在线播放| 亚洲精品久久久久久久久久久久久| 亚洲国产中文字幕久久网| 少妇高潮久久久久久潘金莲| 亚洲欧美国产一本综合首页| 精品久久久久久亚洲国产300| 国产精品视频公开费视频| 亚洲最新av在线网站| 国产视频精品久久久| 亚洲欧美999| 精品欧美激情精品一区| 亚洲精品一区二区三区不| 亚洲精品国产suv| 国产成人中文字幕| 国产热re99久久6国产精品| 欧洲精品久久久| 日韩欧美aaa| 久久精品国产欧美亚洲人人爽| 69视频在线免费观看| 亚洲精品美女视频| 日韩美女免费线视频| 成人写真视频福利网| 成人做爰www免费看视频网站| 国模极品一区二区三区| 国产精品亚洲美女av网站| 97精品视频在线| 精品国产精品三级精品av网址| 国产欧美日韩精品丝袜高跟鞋| 国产欧美日韩精品在线观看| 欧美日韩福利视频| 欧美电影免费观看电视剧大全| 日韩人体视频一二区| 国产精品久久久久久久av电影| 日韩在线欧美在线国产在线| 国产精品日韩av| 久久99亚洲精品| 日本精品久久久久影院| 中文字幕av一区二区三区谷原希美| 在线精品91av| 伊人成人开心激情综合网| 国产精品欧美日韩久久|