数据结构-栈(C语言版)

  栈(LIFO):运算所限的线性表,限制它的插入和删除操作仅在表的一段进行。栈顶(Top)插入、删除。另一端为栈底。
  一直没咋搞懂栈带头和不带头到底有啥意思真滴搞死人!!!

#include<iostream>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
#define maxSize 50
using namespace std;
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode;

/*带头结点链栈*/
//是不是带头主要看进栈的方式 ,为头开辟了空间 
void InitStack(LNode *&lst){
	lst=(LNode*)malloc(sizeof(LNode));//指定了一个头指针 
	lst->next=NULL;
}

int isEmpty(LNode *lst){
	if(lst->next==NULL){
		return 1;
	}else{
		return 0;
	}
}

void push(LNode *lst,int x){
	LNode *p;
	p=(LNode*)malloc(sizeof(LNode));
	p->next=NULL;
	/*一下三句是链表的头插法*/
	p->data=x;
	printf("%d入栈",x);
	p->next=lst->next;
	lst->next=p;
}

int pop(LNode *lst,int &z){
	LNode *p;
	if(p->next==NULL){
		return 0;
	}
	p=lst->next;
	z=p->data;
	printf("%d出栈",z);
	lst->next=p->next;
	free(p);
	return 1;
} 


/*不带头结点的单链表存储链栈*/ 
void initStack1(LNode *&lst){//初始化栈的方式不一样 ,注意它这里没有开辟空间 
	lst=NULL;
}

int isEmpty1(LNode *lst){
	if(lst==NULL){
		return 1;
	}else{
		return 0;
	}
} 





void push1(LNode *&lst,int x)//进栈
{
	LNode *p;
	p=(LNode*)malloc(sizeof(LNode));
	p->next=NULL;
	/*以下三句是插入操作*/
	p->data=x;
	printf("%d入栈",x);
	p->next=lst;
	lst=p; 
} 

int pop1(LNode *&lst,int &x)//元素出栈 
{
	LNode *p;
	if(lst==NULL)
		return 0;
	//删除结点操作 
	p=lst; 
	x=p->data;
	printf("%d出栈",x);
	lst=p->next;
	free(p);
	return 1;
}

int main(){
	int x;
	LNode *lst;
	InitStack(lst);
	push(lst,1);
	
	
	return 0;
}




发布了89 篇原创文章 · 获赞 42 · 访问量 3647

猜你喜欢

转载自blog.csdn.net/weixin_43673156/article/details/105372826