9.14数据结构学习记录

#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main(){
	stack<int>sta;
	sta.push(5);
	cout<<sta.top()<<endl;
	cout<<sta.empty()<<endl;
	sta.pop();
	cout<<sta.empty()<<endl;
	sta.push(1);
	sta.push(2);
	cout<<sta.top()<<endl;
	cout<<sta.size()<<endl;
	return 0;
}

上面都是关于栈操作的的练习,pop()弹出栈顶元素但并不能在弹出的时候顺便输出,不返回值。

考试时不知道能不能用这个,把栈的定义写下来;

typedef struct sqstack{
    int data[maxsize];
    int top;
}sqstack;
sqstack st;
int initstack(sqstack &st){
    st.top=-1;
}//初始化栈
int empty(sqstack &st){//判断栈空
    if(st.top==-1)return 1;
    else return 0;
}
int push(sqstack &st,int x){//进栈
    if(st.top==maxsize-1)return 0;
    ++(st.top);//栈顶指针+1
    st.date[st.top]=x;//给栈顶赋值
    return 0;
}
int pop(sqstack &st,int &x){//这里的pop其实是stl库里的pop与top的结合,去除原宿,移动指针
    if(st.top==-1)return 0;
    x=st.date[st.top];
    --(st.top);
    return 1;    
}
考试时不用这么复杂的
三行代码
st.top=1;//函数初始化
st.date[++st.top]=x;压栈
x=st.date(top--);出栈

 关于栈就那么多,栈的进出远离就不复杂了,不细说,链栈的操作就是头插法,没什么特别需要强调的。下面再说说队列。

q.empty()// 如果队列为空返回true,否则返回false  
q.size() // 返回队列中元素的个数  
q.pop()  //删除队列首元素但不返回其值  
q.front()  // 返回队首元素的值,但不删除该元素  
q.push(X) //在队尾压入新元素 ,X为要压入的元素
q.back() //返回队列尾元素的值,但不删除该元素  

队列是可进行插入一端为队尾,可删除一端为队尾,这个概念很简单。

它的头文件为#include<queue>,之前的栈的头文件为#include<stack>

队的结构定义与顺序栈其实相差无几,只是说把top变成了,front和rear两个指针,加上每次入队出队的机制有所改变

栈只有top增增减减,队列则是头出尾进;

0 1 2 3 4 5 6

队空的时候两个指针指向同一个地方,也就是说,一定会损失一个存储空间。

qu.rear==qu.front//栈空

(qu.rear+1)%maxsize==qu.front

进队操作
qu.rear=(qu.rear+1)%maxsize;qu.date[qu.rear]=x;/前面已经完成了赋值
qu.front=(qu.front+1)%maxsize;x=qu.date[qu.front];//其实就是指针和数据都后移了

顺便一说,stack<int>sta;这种定义是什么意思终于懂了,其实就是结构体中的某个成员是什么type;

比如之前看到的map<strign,int>cont;就是说map这个结构下两个成员分别为int char

操作时,emmm,可以完成数字配对。比如cont["july"]=7;就把july和7关联了起来,称为关联函数。

猜你喜欢

转载自blog.csdn.net/weixin_38706535/article/details/82709066
今日推荐