栈(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;
}