数据结构-栈03

概念:

栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。特点 :后进先出(LIFO)。
在这里插入图片描述
基本运算:

顺序栈

它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。

栈的定义实现
typedef int datatype;

typedef struct node
{
	datatype *data;/*定义栈中数据元素的数据类型*/
	int maxlen;/*当前栈的最大元素个数*/
	int top;/*指示栈顶位置(数组下标)的变量*/
}SeqStack;

创建栈
在这里插入图片描述

SeqStack* Stack_create(int len)
{
	SeqStack *s;

	s = (SeqStack*)malloc(sizeof(SeqStack));

	if(s == NULL)
	{
		puts("malloc failed");
		return NULL;
	}
	
	s->data = (datatype*)malloc(sizeof(len*sizeof(datatype)))
	{
		puts("malloc failed");
		return NULL;
	}

	s->maxlen = len;
	s->top = -1;

	return s;
}

清空栈

void Stack_clear(SeqStack* s)
{
	s->top = -1;
}

判断栈是否空

int Stack_empty(SeqStack* s)
{
	return (s->top == -1 ? 1 : 0);
}

进栈

int Stack_push(SeqStack* s,datatype value)
{
	if(s->top == s->maxlen-1)
	{
		puts("stack full");
		return -1;
	}

	s->data = value;
	p->next = s->next;
	s->next = p;

	return 0
	
}

出栈

datatype Stack_pop(SeqStack* s)
{
	s->top--;

	return (s->data[s->top+1]);
}

取栈顶元素

datatype Stack_top(SeqStack* s)
{
	return (s->data[s->top]);
}

销毁栈

void Stack_free(SeqStack *s)
{
	free(s->data);
	s->data = NULL;
	free(s);
	s = NULL;
}

在这里插入图片描述
它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。
typedef int datatype;/定义栈中数据元素的数据类型/
typedef struct node
{
datatype data; /数据域/
struct node* next;/* 链接指针域*/
}LinkNode_T, *LinkList;
在这里插入图片描述

LinkList stack_create()
{
	LinkList s;

	s = (LinkList)malloc(sizeof(LinkNode_T));

	if(NULL == s)
	{
		puts(" malloc faliled" );
		return NULL;
	}

	s->data = 0;
	s->next = NULL;

	return s;


}

在这里插入图片描述

int stack_empty(LinkList s)
{
	return ( s->next == NULL ? 1 : 0 );
}

在这里插入图片描述

int stack_push(LinkList s,datatype value)
{
	LinkList p  =(LinkList)malloc(sizeof(LinkNode_T));

	if(NULL == p)
	{
		puts("malloc faliled ");
		return ERROR;
	}

	p->data = value;
	p->next = s->next;
	s->next = p;

	return SUCCESS;
}

在这里插入图片描述

datatype stack_pop(LinkList s)
{
	LinkList p;
	datatype ret;

	p = s->next;
	s->next = p->next;
	ret = p->data;
	free(p);
	p = NULL;
	
	return ret;

}

在这里插入图片描述
void stack_clear(LinkList s)
{
LinkList p;

	p = s->next;

	while(p)
	{
		s->next= p->next;
		printf("%d", p->data);
		free(p);
		p = s->next;
	}

}

在这里插入图片描述

datatype stack_top(LinkList s)
{
	return (s->next->data);
}

在这里插入图片描述

  void stack_free(LinkList s)
    {
    	LinkList p;
    
    	p = s;
    
    	while(p)
    	{
    		s = s->next;
    		printf("%d ",p->data);
    		free(p);
    		p = s;
    	}
    	puts("");
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值