栈的实现

    xiaoxiao2021-03-25  92

    是限定仅在表尾进行插入或者删除操作的线性表。因此对于栈来说,表尾端有其特殊含义,称为栈顶,表头端称为栈底,不含元素的栈称为空栈。

    说明下,栈在编程中的使用频率挺高的。今天看到一个项目经理写的框架,里面大量使用到栈。

    栈主要有两种形式:1.用数组实现,称为静态栈,地址是连续的。2.用链表实现,称为动态栈,地址不连续。

    这次,我们以动态栈为例来讲栈。

    首先,我们来看栈的结构

    在这里,我只定义了一个顶部指针。

    下面是代码

    #pragma once #include<iostream> using namespace std; typedef int Elemtype; typedef struct Node { Elemtype elem; struct Node *next; }Node,*SNode; typedef struct { SNode top; }S, *Stack; Stack init_Stack(){ Stack s; if ((s = (Stack)malloc(sizeof(Stack)))) { s->top = NULL; } return s; } void push_Stack(Stack S, Elemtype elem) { SNode p; if (!(p = (SNode)malloc(sizeof(SNode)))) cout << "内存分配失败!" << endl; p->elem = elem; p->next = S->top; S->top = p; } void Create_Stack(Stack S) { Elemtype elem=1 ; while (elem) { cout << "Please enter the element you wanna push:"; cin >> elem; if (elem)push_Stack(S, elem); } } void Traverse_Stack(Stack S) { SNode p; p = S->top; while (p!=NULL) { cout << p->elem << " "; p = p->next; } cout << endl; } void pop_Stack(Stack S) { if (S->top == NULL)cout << "This is a empty stack!" << endl; else S->top = S->top->next; } #include"Stack.h" void main() {     Stack S;     S = init_Stack();     Create_Stack(S);     Traverse_Stack(S);     pop_Stack(S);     Traverse_Stack(S);     system("pause"); } 运行结果:

    转载请注明原文地址: https://ju.6miu.com/read-15397.html

    最新回复(0)