相关结果:#include"stdio.h"
#include"stdlib.h"//定义一个链栈的结构体
//这个链式表有点特殊,它的最大长度是无限大
typedef struct stack {
int data;
struct stack *next;
}Stack;//定义一个判断栈是否为空的方法
int IsEmpty(Stack *top){
if(top->next==NULL){
return 1;
}
else{
return 0;
}
}
//定义一个初始化链栈的方法
void Init(Stack *top){
top=(Stack*)malloc(sizeof(stack)); //定义一个带有头指针top的空栈
top->next=NULL;
}//定义一个进栈的方法
void Push(Stack *top,int x){
//定义一个新的节点
Stack *s=(Stack *)malloc(sizeof(stack));
//先给新的节点赋值,然后再赋地址
s->data=x;
//给新的节点赋地址,这里运用到了头插法,但是我感觉这种写法不是特别的好,不符合栈的特性,没有把top看成节点。
s->next = top->next; //第一个节点放入到栈底
top->next=s;
printf("进栈成功!n");
}//定义一个出栈的方法
void Pop(Stack *top){
Stack *s; //表示的是辅助指针
s=(Stack *)malloc(sizeof(Stack));
if(IsEmpty(top)==1){
printf("栈中没有元素,无法进行出栈 *** 作!n");
}
else{
s=top->next;
top->next = s->next; //删除s节点
free(s); //清除s节点的内存
printf("出栈成功");
}
}//定义一个取出栈顶元素的方法
void GetTop(Stack *top){
if(IsEmpty(top)==1){
printf("栈中没有元素,无法进行取出栈顶元素 *** 作!n");
}
else{
printf("栈顶元素为:%dn",top->next->data);
}
}//定义一个输出链式栈中所有元素的方法。
void show(Stack *top){
Stack *p=top->next;
while(p){
printf("%d-",p->data);
p=p->next;
}
}
int main(){
Stack top; //定义一个带有top头结点的空栈
Init(&top); //将其初始化
//进行进栈 *** 作
Push(&top,0);
Push(&top,1);
Push(&top,2);
GetTop(&top);
show(&top);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)