C语言实现链栈的创建和基本操作(初始化,进栈,出栈等等)

C语言实现链栈的创建和基本操作(初始化,进栈,出栈等等)

往期文章:

  1. C语言实现顺序表的创建及基本操作
  2. C语言实现单链表的创建及基本操作
  3. C语言实现顺序栈的创建和操作(进栈,出栈,打印等等

今天闲来无事,就水一篇文章。关于链栈的创建和各项基本操作的,和链表真的很像,主要记住栈是先进后出的规则就行。

  1. 链栈的结构定义
#include<stdio.h>
#include<stdlib.h>

typedef struct node{//链栈的结构定义 
	int data;//数据域 
	struct node *next;//指针域 
}node; 
  1. 链栈的初始化

返回值是一个指针。

node *start(node *l){//链栈的初始化 本方法返回的是指针 
	l=(node *)malloc(sizeof(node));//为链栈分配内存空间 
	l->next=NULL;//初始化为空栈 
	return l;
} 
  1. 链栈的创建

要注意给新建的指针p分配内存空间,否则程序会出错。

void create(node *l){//创建一个新的链栈 
	node *p;//新建指针p  
	int i=1;
	int j;
	while(i!=0){
		scanf("%d",&j);
		if(j!=-1){
			p=(node*)malloc(sizeof(node)); //一定要给p分配空间,否则程序运行出错 
			p->data=j;
			p->next=l->next;
			l->next=p;//类似于头插法 因为栈结构就是先进后出的 
		}
		else{
			i=0;//输入-1时结束 
		}
	} 
}
  1. 链栈的进栈操作
void push(node *l,int e){//链栈的进栈操作 
	node *p;//新建指针p
	p=(node*)malloc(sizeof(node)); //一定要给p分配空间,否则程序运行出错
	p->data=e;
	p->next=l->next;//头插法入栈 
	l->next=p;
	printf("元素%d进栈!\n",p->data); 
} 
  1. 链栈的出栈操作
void pop(node *l){//链栈的出栈操作 
	node *p;//新建指针p
	p=l->next;
	if(p==NULL){
		printf("该链栈为空,无法出栈!\n");
	}else{
		int e;
		e=p->data;
		printf("元素%d出栈!\n");
		l->next=p->next;//删除结点p 
		free(p);
	}
} 
  1. 链栈的打印
void print(node *l){
	node *p;
	p=l->next; 
	if(p==NULL) {
		printf("该链栈为空,无法打印!\n");
	}
	else{
		printf("该链表的内容为:");
		while(l->next!=NULL){
			printf("%d ",l->next->data);
		    l=l->next;
		}
		printf("\n");
	} 
}

主函数

int main(){
	node *p;
	p=start(p);
	printf("链栈初始化成功!\n");
	printf("请输入新链栈的值:\n");
	create(p);
	print(p);
	push(p,1);
	print(p);
	pop(p);
	print(p);
}

运行截图:
在这里插入图片描述

总结

今天事情好多啊,还有数据结构的作业要写,真累真累。下一篇写队列,就这样先定了。加油,努力,哎哎哎。

  • 15
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值