1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| typedef int ElemType; constexpr auto MaxSize = 100;
typedef struct linknode { ElemType data; struct linknode* next; }LinkStNode;
void InitStack(LinkStNode*& s) { s = (LinkStNode*)malloc(sizeof(LinkStNode)); s->next = NULL; }
void DestroyStack(LinkStNode*& s) { LinkStNode* p = s->next,*pre=s; while (p != NULL) { free(pre); pre = p; p = pre->next; } free(pre); }
int StackLength(LinkStNode* s) { int i = 0; LinkStNode* p; p = s->next; while (p != NULL) { i++; p = p->next; } return i; }
int StackEmpty(LinkStNode* s) { return s->next == NULL; }
void Push(LinkStNode*& s, ElemType e) { LinkStNode* p; p = (LinkStNode*)malloc(sizeof(LinkStNode)); p->data = e; p->next = s->next; s->next = p; }
int Pop(LinkStNode*& s, ElemType& e) { LinkStNode* p; if (s->next == NULL)return 0; p = s->next; e = p->data; s->next = p->next; free(p); return 1; }
int GetTop(LinkStNode*& s, ElemType& e) { if (s->next == NULL)return 0; e = s->next->data; return 1; }
void DispStack(LinkStNode* s) { LinkStNode* p = s->next; while (p != NULL) { printf("%c ", p->data); p = p->next; } printf("\n"); }
|