c中棧的建立spa
棧(stack)又名堆棧,它是一種運算受限的線性表。code
其限制是僅容許在表的一端進行插入和刪除運算。這一端被稱爲棧頂,相對地,把另外一端稱爲棧底。向一個棧插入新元素又稱做進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱做出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。orm
c語言源碼的實現了棧的一些基本操做,包括了建立空棧。遊戲
#include <stdio.h> #include <stdlib.h> #define Max 100 typedef char T; typedef struct MyStack { T aa[Max]; unsigned int p; } stack; //建立空棧 stack* createEmptyStack() { stack* st = (stack *)malloc(sizeof(stack)); int i=0; for(i=0;i<Max;i++) st->aa[i]=0; st->p=0; return st; }; //棧判空 int isEmpty(const stack* st) { if(st->p==0) return 1; else return 0; }; //求棧的大小 unsigned int size(const stack* st) { return st->p; }; //push操做 void push(stack* st,const T a) { st->p=st->p+1; if(st->p==Max) { printf("棧滿\n"); st->p--; return; } st->aa[st->p]=a; }; //pop操做 T pop(stack* st) { if(isEmpty(st)) { printf("棧空"); return NULL; } char t=st->aa[st->p]; st->p=st->p-1; printf("%c ",t); return t; }; //棧銷燬 void destroy(stack* st) { free(st); }; int main() { stack* st = createEmptyStack(); if(isEmpty(st)) printf("MyStack is empty\n"); else printf("MyStack is not empty\n"); push(st,'a'); push(st,'b'); push(st,'c'); push(st,'d'); push(st,'e'); printf("%d\n",size(st)); while(!isEmpty(st)) pop(st); destroy(st); system("pause"); return 0; }
棧的應用:源碼
1.數置轉換,10轉2,轉8;it
2.括號匹配io
3.迴文遊戲im
建立字符nimargin