数据结构笔记-栈

    科技2022-07-16  103

    顺序栈链栈

    顺序栈

    结构函数操作 #define maxlen 20; typedef struct { datatype data[maxlen]; int top; }SeqStack;

    函数操作-初始化

    //初始化1 SeqStack * CreateSeqStack() { SeqStack *sq; sq = new SeqStack; sq -> top =-1; return sq; } //初始化2 void IniteSeqStack(SeqStack &s)// c++语法。&s表示函数中的s和传入的s是同一个是(类似于全局变量) { s.top = -1; } void main() { SeqStack s; InitSeqStack(s); }

    函数操作-进栈

    // 检查栈满否 进栈 int Push(SeqStack &s,datatype x) //c++语法 &s中 &是引用;函数中的s与主函数共用同一个s变量;这样可以直接修改主函数里s1的值 { if(maxlen - 1 == top) return 0; //数组个数为n时,数组索引有【0,n-1】; else { s.data[++(s.top)] = x; return 1; } }

    函数操作-出栈

    int Pop(SeqStack &s,datatype &x) { if(s.top == -1) return 0;// 栈空无元素可弹出 else { x = s.data[top--]; return 1; } }

    函数操作-取栈顶元素

    int ReadTop(SeqStack s) { if(s.top == -1) retuern 0; else { x = s.data[top]; return 1; } }

    函数操作-判栈空,满

    int SEmpty(SeqStack s) { if(s.top == -1) return 1; else return 0; } int SFull(SeqStack s) { if(s.top == maxlen -1) return 1; else return 0; }

    链栈

    typedef struct stacknode { datatype data; struct stacknode * next; }StackNode; typedef stacklink { StackNode * top; }LinkStack;

    函数操作-入栈

    // 栈后进先出 ,只在栈顶 进出 void Push(LinkStack &s,datatype x) { StackNode *p = new StackNode; p -> data = x; p -> next = s.top; s.top = p; }

    函数操作-出栈

    //删除栈顶元素 int Pop(LinkStack &s,datatype &x) { if(s.top == NULL) { printf(“stack is empty”); return 0; } else { StackNode *p = s.top; x = p->data; s.top = p ->next; delete(p); return 1; } }

    函数操作-判栈空+显示

    int SEmpty(LinkStack s) { if(NULL == s.top) return 1; else return 0; } void ShowStack(LinkStack s) { if(NUll == s.top) { printf(“stack is empty”); } else { StackNode *p = s.top; while(p) { court<<p->data; p = p -> next; } } }

    c++栈的模板库调用

    还不会

    Processed: 0.008, SQL: 8