链栈C++(考研数据结构)



#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
/**定义一个链栈*/
typedef struct  LNode{
 int data;
 struct LNode *next;
}LNode;


/**初始化*/
void initStack(LNode *&lst){ //此处需要注意  定义一个LNode * 类型的 lst ,同时因为需要改变lst 所以用了&

lst=(LNode*)malloc(sizeof(LNode));
lst->next=NULL;
printf("链栈初始化成功!\n");
}
/**判断栈是否为空*/
int isEmpty(LNode *lst){
if(lst->next==NULL){
    printf("链表为空");
    return 1;
}else{
return 0;
}
}
/**入栈*/
void push(LNode *lst,int x){
LNode *p;
//创建头结点
p=(LNode*)malloc(sizeof(LNode));
p->next=NULL;

/**入栈操作*/
p->data=x;
p->next=lst->next;
lst->next=p;
//输出
printf("%d 入栈成功\n",x);
}
/**出栈操作*/
void pop(LNode *lst,int &x){
LNode *p;
if(lst->next==NULL){
    printf("栈空,请勿出栈!\n");
}
else{
    p=lst->next;
    x=p->data;
    lst->next=p->next;
    free(p);
    printf("%d 出栈成功\n",x);
}
}
/**打印栈*/
void printfStack(LNode *lst){
LNode *p;
p=lst->next;
while(p!=NULL){
    printf("%d ",p->data);
    p=p->next;
}
}
int main(){
LNode * linkStack;
initStack(linkStack);
push(linkStack,5);
push(linkStack,6);
push(linkStack,9);
push(linkStack,90);
int x=0;
pop(linkStack,x);
printfStack(linkStack);
//printf("%d",linkStack->next->data);
}

上一篇:后缀表达式


下一篇:Codeforces Round #767 (Div. 2) C. Meximum Array---思维