C++链栈的入栈,出栈及其他操作

 如果有什么错误,烦请各位大佬指出了,这只是我的学习笔记.

定义栈结点的结构类型

class node{
	public:
		int data;
		node *next;
}; 

声明栈类,及入栈 和出栈的操作

//栈不需要头节点,直接在top指针操作,所以不需要在构造函数中给top申请地址 
//插入操作,直接申请一个结点,将top = s;这样对top操作就是对栈顶的操作 
class Stack{
	public:
		node *top;
		
		Stack(){ //z利用构造函数将栈指针设置为NULL,否则top指针就成了野指针,因为没有指向一块内存
			top = NULL;
		}

        void push(int x); //进栈操作

        int pop();     //出栈操作
}

 1. 进栈操作

//链栈不需要判断栈是否满了,但是可以判断是否申请内存成功,我这里没有判断 
void Stack::push(int x){  
			node *s = new node;
			s->data = x;
			s->next = top; //结点的next域指向头指针 
			top = s;        //头指针再指向新结点 
		}

2. 出栈操作

//出栈是始终从栈顶出栈,所以在入栈的时候使用头插法入栈.
//出栈,创建一个临时结点,让临时结点指向头结点,把top->data赋值给x,
//让top后移,并删除临时结点,因为临时结点保存的是上一个结点 
    int pop(){
		if(top==NULL){  
			cout<<"栈空了"<data;
			top = top->next;
			delete p;
			return x;
		}
	}

 3.   取栈顶元素,不需要移动指针,只需要判断栈是否为空,不为空的时候将栈顶元素返回即可

int gettop(){
	if(top==NULL){
		cout<<"栈空了"<data;
	}
}

 4. 判断栈空操作

//判断栈空函数,如果栈为空,则返回1,确实是空的,不为空则返回0; 
	int isEmpty(){
		if(top==NULL){
			return return 1; 
		}else{
			return 0;
		}
	}

 5. 析构函数是用来清空栈的操作

 如果栈不为空,则创建一个临时结点指向头结点,让头节点往后移动一个结点,删除p结点,p保存了上一个结点   
     ~stack(){
			
		while(top != NULL){  
			node *p = top;
			top = top->next;
			delete p;
		}
	} 

你可能感兴趣的:(数据结构,其他,链表,数据结构)