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

首頁 > 編程 > C > 正文

數據結構 棧的操作實例詳解

2020-01-26 14:03:03
字體:
來源:轉載
供稿:網友

數據結構 棧的操作實例詳解

說明:

    往前學習數據結構,想運行一個完整的順序棧的程序都運行不了,因為書上給的都是一部分一部分的算法,并沒有提供一個完整可運行的程序,聽了實驗課,自己折騰了一下,總算可以寫一個比較完整的順序棧操作的小程序,對于棧也慢慢開始有了感覺。下面我會把整個程序拆開來做說明,只要把這些代碼放在一個文件中,用編譯器就可以直接編譯運行了。

一、實現

1.程序功能

  關于棧操作的經典程序,首當要提及進制數轉換的問題,利用棧的操作,就可以十分快速地完成數的進制轉換。

2.預定義、頭文件導入和類型別名

    代碼如下:

#include<stdio.h>#include<stdlib.h>#define OVERFLOW -1#define ERROR 0#define FALSE 0#define TRUE 1#define OK 1 typedef int ElemType;typedef int Status;

    除了兩個頭文件的導入是必須的之外,下面做兩點說明:

(1)其余的常量定義都是可選的,為的就是在下面的代碼書寫過程中可以盡量使用英文來表達程序的意思,而不是在代碼的實現過程中直接使用數字,依個人喜歡,也可以直接使用數字;

(2)使用typedef做類型的別名也僅僅是為了程序中代碼的意思更加清晰明了而已,實際也可以不這樣使用;

3.順序棧的定義 

   代碼如下:

typedef struct{  ElemType *elem;   //存儲空間的基址  int top;      //棧頂元素的下一個元素,簡稱棧頂位標  int size;      //當前分配的存儲容量,作用看入棧操作就可以知道  int increment;   //擴容時,增加的存儲容量,作用看入棧操作就可以知道} SqStack;         //順序棧名稱

4.棧的初始化

    代碼如下:

Status InitStack_Sq(SqStack &S, int size, int inc){   //接受3個參數,&S是對結構體的引用  S.elem = (ElemType*)malloc(size*sizeof(ElemType)); //分配存儲空間  if(S.elem == NULL) return OVERFLOW;   //判斷上一步分配存儲空間是否成功  S.top = 0;      //置S為空棧,S.top為0即表示棧為空棧  S.size = size;    //棧的空間初始容量值  S.increment = inc;  //棧的空間初始增量值(如果需要擴容)  return OK;    //上面的執行正常,返回OK}

5.空棧的判斷

    代碼如下:

Status StackEmpty_Sq(SqStack S){  if(S.top == 0)    return TRUE;  else    return FALSE;}//空棧的決斷是,如果棧為空就返回1,否則就返回0,當然可以不這樣規定;//至于為什么要做空棧的判斷,自然是有原因的,下面再看程序的代碼時就可以知道了。

6.入棧

    代碼如下:

Status Push_Sq(SqStack &S, ElemType e){  //將元素e壓入棧,這里e只是一個形參而已  ElemType *newbase;    //定義中間變量  if(S.top>= S.size){    //S.top如果指向最后一個不存儲元素的地址時,即S.top大于    newbase = (ElemType*)realloc(S.elem, //等于S.size時,就表示棧滿了  (S.size + S.increment)*sizeof(ElemType)); //通過realloc動態擴容     if(NULL == newbase) return OVERFLOW; //判斷擴容是否成功  S.elem = newbase;   //擴容成功后才將中間變量的值指向S.elem,防止擴容失敗時,  S.size = S.size + S.increment;   //S.elem指向一個不是原來的位置  }  S.elem[S.top] = e;  //將e元素入棧  S.top++;       //使S.top加1,表示指向的是棧頂位標  return OK;      //上面操作正常后返回1}

7.出棧

    代碼如下:

Status Pop_Sq(SqStack &S, ElemType &e){  //棧頂元素出棧,賦給元素e  if(0 == S.top) return ERROR;    e = S.elem[--S.top];  //e出棧,并將S.top減1  return OK;}

8.進制轉換的函數

    其實上面的步驟操作都是為了創建一個順序棧和定義順序棧的操作而已,并對可能出現的各種情況做一些相應的舉措,完畢后,下面就要使用上面創建的順序棧以及棧的操作接口了,即在數制轉換函數(這里是十進制轉八進制)中使用上面的操作接口,代碼如下:

void Converstion(int N){  SqStack S;  ElemType e;  InitStack_Sq(S, 10, 5);  //棧S的初始容量置為10,每次擴容容量為5     while(N != 0){    Push_Sq(S, N%8);  //將N除以8的余數入棧    N /= 8;      //N取值為其除以8的商  }             //理論基礎為除8取余法     while(StackEmpty_Sq(S) == FALSE){    Pop_Sq(S, e);  //依次輸出棧中的余數,并賦給元素e    printf("%d", e); //打印元素  }

9.main函數

    進制轉換函數調用棧操作的接口函數,以實現在數制轉換過程中棧的操作;main函數調用數制轉換函數,以實現數制的轉換,代碼如下:

int main(void){  printf("Enter a number:");scanf("%d",&num);  Converstion(num);  printf("/n");}

二、執行

    有了上面的代碼后,就可以在編譯器中編譯執行了,這里我是用c free 5來進行程序代碼的編譯:

(1)輸入的數為1348時的結果:

(2)輸入的數為2526時的結果:

三、完整的代碼

    下面把代碼都放在一起:

#include<stdio.h>#include<stdlib.h>#define OVERFLOW -1#define ERROR 0#define FALSE 0#define TRUE 1#define OK 1 typedef int ElemType;typedef int Status; typedef struct{  ElemType *elem;  int top;  int size;  int increment;} SqStack; Status InitStack_Sq(SqStack &S, int size, int inc){  S.elem = (ElemType*)malloc(size*sizeof(ElemType));  if(S.elem == NULL) return OVERFLOW;  S.top = 0;  S.size = size;  S.increment = inc;  return OK;} Status StackEmpty_Sq(SqStack S){  if(S.top == 0)    return TRUE;  else    return FALSE;} Status Push_Sq(SqStack &S, ElemType e){  ElemType *newbase;  if(S.top>= S.size){    newbase = (ElemType*)realloc(S.elem,  (S.size + S.increment)*sizeof(ElemType));     if(NULL == newbase) return OVERFLOW;  S.elem = newbase;  S.size = S.size + S.increment;  }  S.elem[S.top] = e;  S.top++;  return OK;} Status Pop_Sq(SqStack &S, ElemType &e){  if(0 == S.top) return ERROR;  e = S.elem[--S.top];  return OK;} void Converstion(int N){  SqStack S;  ElemType e;  InitStack_Sq(S, 10, 5);     while(N != 0){    Push_Sq(S, N%8);    N /= 8;  }     while(StackEmpty_Sq(S) == FALSE){    Pop_Sq(S, e);    printf("%d", e);  }} int main(void){  int num;  printf("Enter a number:");scanf("%d",&num);  Converstion(num);  printf("/n");}

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人综合精品在线| 欧美激情综合色综合啪啪五月| 亚洲国产一区二区三区在线观看| 亚洲男人的天堂在线| 日韩有码在线视频| 尤物九九久久国产精品的分类| 久久久亚洲福利精品午夜| 尤物九九久久国产精品的特点| 亚洲国产精品悠悠久久琪琪| 91国内揄拍国内精品对白| 日韩va亚洲va欧洲va国产| 亚洲人高潮女人毛茸茸| 最近中文字幕mv在线一区二区三区四区| 亚洲精品自拍偷拍| 精品久久久国产精品999| 成人美女免费网站视频| 日韩精品视频免费专区在线播放| 视频一区视频二区国产精品| 欧美精品日韩www.p站| 日韩av影片在线观看| 日本高清不卡的在线| 97精品国产aⅴ7777| 国产精品成人在线| 97精品伊人久久久大香线蕉| 亚洲成人精品视频| 久久这里只有精品视频首页| 日韩欧美精品在线观看| 亚洲免费一级电影| 亚洲jizzjizz日本少妇| 国产精品aaa| 国产精品美女久久久久av超清| 欧美激情精品久久久久久变态| 国产一区二区三区日韩欧美| www.日韩不卡电影av| 亚洲国语精品自产拍在线观看| 欧美精品在线第一页| 国内精品小视频在线观看| 欧美又大又硬又粗bbbbb| 欧美自拍视频在线观看| 在线播放国产精品| 91久久精品久久国产性色也91| 久久久久久久影视| 亚洲精品综合精品自拍| 九九九久久久久久| 日韩亚洲第一页| 欧美成人国产va精品日本一级| 成人中文字幕+乱码+中文字幕| 欧美丰满片xxx777| 欧美精品www在线观看| 欧美猛男性生活免费| 国产91精品久久久久久| 97视频免费看| 欧美一区二区.| 精品欧美一区二区三区| 亚洲久久久久久久久久| 欧美日韩国产精品一区| 日韩中文在线中文网三级| 日本免费一区二区三区视频观看| 亚洲国产天堂久久国产91| 亚洲天堂av高清| 91欧美日韩一区| 国产亚洲精品91在线| 最近2019年日本中文免费字幕| 亚洲欧洲在线免费| 欧美一级黑人aaaaaaa做受| 亚洲天堂日韩电影| 成人黄色中文字幕| 美乳少妇欧美精品| 97久久精品人人澡人人爽缅北| 一区二区三区无码高清视频| 久久这里只有精品视频首页| 4438全国成人免费| 亚洲欧美国产精品va在线观看| 欧美亚洲伦理www| 日本成人免费在线| 亚洲乱码国产乱码精品精| 国产精品自产拍在线观看中文| 中文字幕亚洲一区| 成人黄色免费片| 日韩av片免费在线观看| 麻豆乱码国产一区二区三区| 96pao国产成视频永久免费| 亚洲精品久久久久| 亚洲激情视频在线观看| 色综合天天狠天天透天天伊人| 欧美日产国产成人免费图片| 国产视频精品xxxx| 欧美一级大片在线免费观看| 国产中文字幕日韩| 国产精品自拍网| 欧美日韩午夜剧场| 欧美国产日韩一区| 国产精品中文字幕在线观看| 91精品国产777在线观看| 欧美成人一区在线| 九九热在线精品视频| 国产精品美女主播在线观看纯欲| 国产成人亚洲综合91| 91av福利视频| 亚洲欧美成人精品| 国产欧美日韩免费看aⅴ视频| 日韩电影中文字幕一区| 日韩在线中文字| 欧美激情三级免费| 欧洲永久精品大片ww免费漫画| 亚洲xxx视频| 欧美巨猛xxxx猛交黑人97人| 国产精品va在线播放我和闺蜜| 国产成人精品日本亚洲专区61| xxx一区二区| 日本国产一区二区三区| 午夜精品久久久99热福利| 日本19禁啪啪免费观看www| 亚洲精品之草原avav久久| 久久久噜噜噜久噜久久| 亚洲a中文字幕| 国产免费一区二区三区在线能观看| 日韩人体视频一二区| 97人人爽人人喊人人模波多| 欧美色欧美亚洲高清在线视频| 成人免费自拍视频| 国产精品jvid在线观看蜜臀| 成人免费看片视频| 在线成人中文字幕| 欧美老肥婆性猛交视频| 91色中文字幕| 91精品国产电影| 国产成人福利网站| 美女999久久久精品视频| 成人美女免费网站视频| 精品久久久久久久中文字幕| 久久99青青精品免费观看| 欧美极品少妇xxxxⅹ免费视频| 亚洲精品美女免费| 午夜精品蜜臀一区二区三区免费| 亚洲美女动态图120秒| 91sa在线看| 欧美性xxxx| 91亚洲精品久久久| 日韩精品免费在线视频| 日本在线精品视频| 免费av在线一区| 久久精品国产69国产精品亚洲| 日韩视频免费在线| 国产亚洲精品久久久优势| 久久中文久久字幕| 久久久久久久久中文字幕| 欧美多人乱p欧美4p久久| 乱亲女秽乱长久久久| 中文字幕亚洲图片| 亚洲2020天天堂在线观看| 欧美又大又硬又粗bbbbb| 国产精自产拍久久久久久| 久久久噜噜噜久久久| 日韩美女免费线视频| 日韩精品中文在线观看| 国产精品美女午夜av| 一区二区三区国产在线观看| 欧美激情va永久在线播放| 日韩欧美在线国产| 欧美性猛交xxxx偷拍洗澡| 亚洲欧美成人精品| 国产精品吹潮在线观看| 亚洲国产精品va在线观看黑人|