工作生活C++和数据结构

栈的定义和C++实现,最土逼的做法。好理解啊。

2019-07-02  本文已影响0人  朱宏飞

栈的定义:

栈(stack)是限定仅在表尾进行插入和删除操作的线性表。注意他的特点(先进后出);

具体地理解:栈首先是个线性表,栈元素之间含有线性关系,前驱后继的关系。

---------------------------------------------------------------------------------------------------------------------------

这两天有点害怕数据结构了,可以听懂,但是让我编写我却编不出来。这是最操蛋的。

一定要知行和一。加油。我可以的。

-----------------------------------------------------------------------------------------------------------------------------

数据结构对栈的定义:

typedef int SElemType;  这句话常用 相当于给int起了个别名叫做SElemType。

typedef struct{

SElemType data[MAXSIZE];

int top;    //用于栈顶指针

}SqStrack;  

操作:进栈操作,插入元素

Status Push (SqStrack *S,SElemType e){

          if(S->top==MAXSIZE-1){

             return -1;//mistake

         }

S->top++;   //栈顶指针增加1

S->data[S->top]=e;//将新插入元素赋值给栈顶空间

return OK;

}

操作:出栈操作 

//若栈不空,删除S的栈顶元素,用e返回其值,并返回ok,否则返回-1;

Status Pop (SqStrack *S,SElemType * e){

          if(S->top==-1){

             return -1;//mistake

         }

*e=S->data[S->top];  将要删除的栈顶元素赋值给e

S->top--;   //栈顶指针增加1

return OK;

}

-----------------------------------------------------------------------------------------------------------

详细代码C++

#include<iostream>

#define SIZE 10

#define ERROR -1

using namespace std;

//栈的结构体定义

struct SqStack{

int *top;//栈顶指针

int *low;//栈底指针

int size;//栈的当前容量大小

};

//初始化栈

void Init(SqStack &s){

s.low=new int [SIZE];

if(!s.low) exit ERROR;

s.top=s.low;//这里使得栈顶指针和栈底指针指向同一个地址

s.size=SIZE;//定义栈的容量为100

}

//栈的操作,压入

int Push(SqStack &s,int e) {

if(s.top-s.low>s.size)//栈满 ,我们报错

{

cout <<"栈满"<<endl;

return ERROR;

}

*s.top=e;

s.top++;//栈顶指针加1

return 1;

}

//栈的操作取出栈顶元素,并删除栈顶

int Pop(SqStack &s,int &e)

{

if(s.top==s.low)

    return 0;

s.top--;//top先减去1,然后再去取元素

e=*s.top;

return 1;

}

//判空

int IsEmpty(SqStack s)

{

if(s.top==s.low)

    return 1;

else

    return 0;

}

void Destroy(SqStack &s) //销毁栈

{

delete s.low;

}

int main(){

SqStack slist;

Init(slist);

cout<<"请输入一串数字:"<<endl;

int e;

while(cin>>e){

Push(slist,e);

cout<<e<<" ";

}

while(!IsEmpty(slist))

{

Pop(slist,e);

cout<<e<<" ";

}

Destroy(slist);

return 0;

}

上一篇 下一篇

猜你喜欢

热点阅读