c/c++ 线性栈
线性栈
下面的代码实现了以下功能
函数 | 功能描述 |
---|---|
push | 压入 |
pop | 弹出 |
show_list | 打印 |
clear | 移动top指针到栈底 |
destroy | 释放所有内存空间 |
seqstack.h
#ifndef __SEQSTACK__#define __SEQSTACK__#include#include #include #include #include #define SEQSTACK_INIT_SIZE 8#define ADD_SIZE 1000typedef int ElemType;typedef struct seqstack{ int size; ElemType *base; ElemType *top;}seqstack;void init(seqstack*);void push(seqstack*, ElemType);void show_list(seqstack*);void pop(seqstack*);int length(seqstack*);void clear(seqstack*);void destroy(seqstack*);#endif
seqstack.c
#include "seqstack.h"bool reInit(seqstack* seq){ ElemType* new = (ElemType*)realloc(seq->base, ADD_SIZE *sizeof(ElemType)); if(NULL == new)return true; if(seq->base != new){ seq->base = new; seq->top = seq->base + seq->size + 1; } return false;}void init(seqstack* seq){ ElemType* e = (ElemType*)malloc(sizeof(ElemType) * SEQSTACK_INIT_SIZE); seq->base = seq->top = e; seq->size = 0;}void push(seqstack* seq, ElemType x){ if(seq->size >= SEQSTACK_INIT_SIZE && reInit(seq)){ printf("stack is full\n"); return; } //先赋值,后移动top的指向 *((seq->top)++) = x; seq->size++;}void show_list(seqstack* seq){ ElemType* e = seq->top; while(e-- != seq->base){ printf("%d\n",*e); }}void pop(seqstack* seq){ --seq->top; seq->size--;}int length(seqstack* seq){ return seq->size;}void clear(seqstack* seq){ seq->top = seq->base; seq->size = 0;}void destroy(seqstack* seq){ free(seq->base);}
seqstackmain.c
#include "seqstack.h"int main(){ seqstack list; init(&list); int select = 1; ElemType item; int index; while(select){ printf("*****************************************\n"); printf("*** [1] push [2] pop ***\n"); printf("*** [3] show_list [4] length ***\n"); printf("*** [5] clear [6] destroy ***\n"); printf("*** [0] quit ***\n"); printf("*****************************************\n"); printf("请选择:>"); scanf("%d", &select); if(0 == select) break; switch(select){ case 1: printf("请输入要插入的数据>\n"); scanf("%d",&item); push(&list, item); show_list(&list); break; case 2: pop(&list); show_list(&list); break; case 3: show_list(&list); break; case 4: printf("length is %d\n", length(&list)); show_list(&list); break; case 5: clear(&list); show_list(&list); break; case 6: destroy(&list); break; default: printf("输入的选择错误,请重新选择\n"); break; } } destroy(&list);}