日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构 栈

發布時間:2023/12/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构 栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼

#include <stdio.h> #include <stdlib.h>/************************************************************************/ /*棧應用示例--數制轉換要求:輸入任意的正整數N(十進制),分別輸出該整數的二進制、八進制、十六進制的結果算法公式:N = (N div d) * d + N mod d (div表示整除,mod表示求余)(216)(十進制) = (330)(八進制) = (D8)(十六進制) = (11011000)(二進制)短除法N N div 8 N mod 8 216 27 027 3 33 0 3N N div 16 N mod 16216 13 813 0 D注意:十六進制的數字組成:0 1 2 3 4 5 6 7 8 9 A B C D E F關于進制間轉換:《七日成蝶-C語言編程基礎視頻課程》 */ /************************************************************************/#define STACK_CAPACITY 25typedef struct tag_stack {char *pBuffer; //指向棧中用于存放數據的內存int top; //棧頂int length; //棧中實際元素個數 }Stack;bool InitStack(Stack **pStack); //分配內存初始化棧空間,設定棧容量,棧頂 void DestroyStack(Stack *pStack); //回收棧空間內存 bool StackEmpty(Stack *pStack); //判定棧是否為空,為空返回true,非空返回false bool StackFull(Stack *pStack); //判定棧是否已滿,為滿返回true,不滿返回false void ClearStack(Stack *pStack); //清空棧 int StackLength(Stack *pStack); //已有元素的個數 bool Push(Stack *pStack, char *elem); //元素入棧,棧頂上升 bool Pop(Stack *pStack,char *elem); //元素出棧,棧頂下降 void StackTraverse(Stack *pStack, bool isFromButtom); //遍歷棧中所有元素bool InitStack(Stack **pStack) {*pStack = (Stack *)malloc(sizeof(Stack));if(*pStack == NULL){return false;}(*pStack)->pBuffer = (char *)malloc(sizeof(char) * STACK_CAPACITY);if((*pStack)->pBuffer == NULL){return false;}//(*pStack)->top = 0;//(*pStack)->length = 0;ClearStack(*pStack);return true; }void DestroyStack(Stack *pStack) {free(pStack->pBuffer);pStack->pBuffer = NULL;free(pStack);pStack = NULL; }void ClearStack(Stack *pStack) {pStack->length = 0;pStack->top = 0; }bool StackEmpty(Stack *pStack) {if(pStack->length == 0){return true;}return false; }bool StackFull(Stack *pStack) {if(pStack->length == STACK_CAPACITY){return true;}return false; }int StackLength(Stack *pStack) {return pStack->length; }bool Push(Stack *pStack, char *elem) {if(StackFull(pStack)){return false;}pStack->pBuffer[pStack->top] = *elem;pStack->top++;pStack->length++;return true; }bool Pop(Stack *pStack,char *elem) {if(StackEmpty(pStack)){return false;}pStack->top--;*elem = pStack->pBuffer[pStack->top];pStack->length--;return true; }void StackTraverse(Stack *pStack, bool isFromButtom) {if(isFromButtom){for(int i = 0; i < pStack->length; i++){printf("%c", pStack->pBuffer[i]);}}else{for (int i = pStack->top - 1; i >= 0; i--){printf("%c", pStack->pBuffer[i]);}} }int main(void) {Stack *myStack = NULL;int num = 216;int P = 2;char str[] = "0123456789ABCDEF";if(InitStack(&myStack)){while(num != 0){Push(myStack, &(str[num % P]));num = num / P;}StackTraverse(myStack, false);DestroyStack(myStack);}system("pause");return 0; }

復合類型棧編碼

  • pStack->pBuffer[pStack->top].x = elem->x;
  • pStack->pBuffer[pStack->top].y = elem->y;
  • 等效于
  • pStack->pBuffer[pStack->top]?= *elem;
  • 因為 結構體Coordinate 僅僅包含 int類型,不涉及復雜的指針操作,直接賦值即可
#include <stdio.h> #include <stdlib.h>/************************************************************************/ /* 坐標棧實現操作坐標數據類型的棧坐標為二維坐標{x, y} */ /************************************************************************/typedef struct tag_coordinate {int x;int y; }Coordinate;void printCoordinate(Coordinate *coor) {printf("(%d, %d)\n", coor->x, coor->y); }#define STACK_CAPACITY 5typedef struct tag_stack {Coordinate *pBuffer; //指向棧中用于存放數據的內存int top; //棧頂int length; //棧中實際元素個數 }Stack;bool InitStack(Stack **pStack); //分配內存初始化棧空間,設定棧容量,棧頂 void DestroyStack(Stack *pStack); //回收棧空間內存 bool StackEmpty(Stack *pStack); //判定棧是否為空,為空返回true,非空返回false bool StackFull(Stack *pStack); //判定棧是否已滿,為滿返回true,不滿返回false void ClearStack(Stack *pStack); //清空棧 int StackLength(Stack *pStack); //已有元素的個數 bool Push(Stack *pStack, Coordinate *elem); //元素入棧,棧頂上升 bool Pop(Stack *pStack,Coordinate *elem); //元素出棧,棧頂下降 void StackTraverse(Stack *pStack, bool isFromButtom); //遍歷棧中所有元素bool InitStack(Stack **pStack) {*pStack = (Stack *)malloc(sizeof(Stack));if(*pStack == NULL){return false;}(*pStack)->pBuffer = (Coordinate *)malloc(sizeof(Coordinate) * STACK_CAPACITY);if((*pStack)->pBuffer == NULL){return false;}//(*pStack)->top = 0;//(*pStack)->length = 0;ClearStack(*pStack);return true; }void DestroyStack(Stack *pStack) {free(pStack->pBuffer);pStack->pBuffer = NULL;free(pStack);pStack = NULL; }void ClearStack(Stack *pStack) {pStack->length = 0;pStack->top = 0; }bool StackEmpty(Stack *pStack) {if(pStack->length == 0){return true;}return false; }bool StackFull(Stack *pStack) {if(pStack->length == STACK_CAPACITY){return true;}return false; }int StackLength(Stack *pStack) {return pStack->length; }bool Push(Stack *pStack, Coordinate *elem) {if(StackFull(pStack)){return false;}//pStack->pBuffer[pStack->top] = *elem;pStack->pBuffer[pStack->top].x = elem->x;pStack->pBuffer[pStack->top].y = elem->y;pStack->top++;pStack->length++;return true; }bool Pop(Stack *pStack,Coordinate *elem) {if(StackEmpty(pStack)){return false;}pStack->top--;*elem = pStack->pBuffer[pStack->top];pStack->length--;return true; }void StackTraverse(Stack *pStack, bool isFromButtom) {if(isFromButtom){for(int i = 0; i < pStack->length; i++){//printf("%c ", pStack->pBuffer[i]);//printf("(%d, %d)\n", pStack->pBuffer[i].x, pStack->pBuffer[i].y);printCoordinate(&(pStack->pBuffer[i]));}}else{for (int i = pStack->top - 1; i >= 0; i--){//printf("%c ", pStack->pBuffer[i]);//printf("(%d, %d)\n", pStack->pBuffer[i].x, pStack->pBuffer[i].y);printCoordinate(&(pStack->pBuffer[i]));}} }int main(void) {Stack *myStack = NULL;Coordinate ch1 = {2, 3};Coordinate ch2 = {4, 5};Coordinate ch3 = {6, 7};Coordinate ch4 = {8, 9};Coordinate ch5 = {1, 0};Coordinate ch = {0, 0};if(InitStack(&myStack)){if(StackEmpty(myStack)){printf("\n當前棧為空\n");}Push(myStack, &ch1);Push(myStack, &ch2);Push(myStack, &ch3);Push(myStack, &ch4);Push(myStack, &ch5);StackTraverse(myStack, true);if(StackFull(myStack)){printf("\n當前棧為滿\n");}Pop(myStack, &ch);printCoordinate(&ch);StackTraverse(myStack, false);printf("StackLength = %d\n", StackLength(myStack));DestroyStack(myStack);}system("pause");return 0; }

?

總結

以上是生活随笔為你收集整理的数据结构 栈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。