homework--6 (2023.10.5)

实现链栈的代码

执行结果

完整代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>


typedef int data_t;
typedef struct Node
{
	data_t val;
	struct Node* next;
}*linkatck;


//节点的创建
linkatck link_stack_create(data_t value);
//入栈(头插)
int link_stack_push(linkatck* H,data_t value);
//出栈(头删)
int link_stack_pop(linkatck* H);
//遍历
int link_stack_show(linkatck H);
//销毁
int link_stack_free(linkatck *H);



int main(int argc, const char *argv[])
{
	linkatck ls=NULL;
	int value=0;
	printf("please input \n");
	while(1)
	{
		scanf("%d",&value);
		link_stack_push(&ls,value);
		if(getchar()=='\n')
			break;
	}
	//出栈3个元素
	link_stack_pop(&ls);
	link_stack_pop(&ls);
	link_stack_pop(&ls);

	link_stack_show(ls);

	link_stack_free(&ls);

	link_stack_show(ls);

	
	return 0;
}





//节点的创建
linkatck link_stack_create(data_t value)
{
	linkatck H=(linkatck)malloc(sizeof(struct Node));
	if(H==NULL)
	{
		printf("malloc fail\n");
		return NULL;
	}
	H->val=value;
	H->next=NULL;
	return H;
}


//入栈(头插)
int link_stack_push(linkatck* H,data_t value)
{
	linkatck newsnode=link_stack_create(value);
	if(*H==NULL)
	{
		*H=newsnode;
		return 0;
	}
	newsnode->next=(*H)->next;
	(*H)->next=newsnode;
	newsnode->val=(*H)->val;
	(*H)->val=value;
	return 0;
}


//出栈(头删)
int link_stack_pop(linkatck* H)
{
	if(*H==NULL)
		return -1;
	if((*H)->next==NULL)
	{
		free(*H);
		*H=NULL;
		return 0;
	}
	linkatck del=(*H)->next;
	(*H)->next=del->next;
	(*H)->val=del->val;
	free(del);
	del=NULL;
	return 0;
}


//遍历
int link_stack_show(linkatck H)
{
	if(H==NULL)
	{
		printf("linkatck is empty\n");
		return 0;
	}
	linkatck p=H;
	printf("show : ");
	while(p)
	{
		printf("%d ",p->val);
		p=p->next;
	}
	puts("");
	return 0;

}


//销毁
int link_stack_free(linkatck *H)
{
	if(*H==NULL)
		return -1;
	while(*H)
	{
		linkatck del=*H;
		*H=(*H)->next;
		free(del);
		del=NULL;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值