数据结构>>>数组与链表的应用>>栈的实现

栈:

  • 结构描述
  • 初始化
  • 压栈
  • 出栈

下面是具体实现:

1.结构描述:

typedef struct Node//构造结点
{
	int data;
	struct Node *pNext;
}NODE,*PNODE;

typedef struct Stack//构造栈的元素
{
	PNODE pTop;
	PNODE pBottom;
}STACK,*PSTACK;

2, 初始化:

void init(PSTACK pz)
{
	pz->pTop =(PNODE)malloc(sizeof(NODE));
	if(pz->pTop==NULL)
	{
		cout<<"动态内存分配失败!\n"<<endl;
		exit(-1);
	}
	else
	{
		pz->pBottom =pz->pTop;
		pz->pTop ->pNext =NULL;
	}
}

3.压栈:

void push(PSTACK pz,int val)
{
	PNODE pNew=(PNODE)malloc(sizeof(NODE));
	pNew->data =val;
	pNew->pNext =pz->pTop ;
	pz->pTop =pNew;
}

4.出栈:

bool pop(PSTACK pz,int *pval)
{
	if(empt(pz))
	return false;
	else
	{
		PNODE out=pz->pTop;
		*pval=out->data ;
		pz->pTop =out->pNext ;
		free(out);
		out=NULL;
		return true;
	}
}

------》源代码:

#include<iostream>
#include<malloc.h>
#include<stdlib.h>
using namespace std;

//1.结构描述:
typedef struct Node//构造结点
{
	int data;
	struct Node *pNext;
}NODE,*PNODE;

typedef struct Stack//构造栈的元素
{
	PNODE pTop;
	PNODE pBottom;
}STACK,*PSTACK;

//2.初始化:
void init(PSTACK pz)
{
	pz->pTop =(PNODE)malloc(sizeof(NODE));
	if(pz->pTop==NULL)
	{
		cout<<"动态内存分配失败!\n"<<endl;
		exit(-1);
	}
	else
	{
		pz->pBottom =pz->pTop;
		pz->pTop ->pNext =NULL;
	}
}
 
//3.压栈:
void push(PSTACK pz,int val)
{
	PNODE pNew=(PNODE)malloc(sizeof(NODE));
	pNew->data =val;
	pNew->pNext =pz->pTop ;
	pz->pTop =pNew;
}

//遍历:
void traverse (PSTACK pz)
{
	PNODE p=pz->pTop ;
	while(p!=pz->pBottom )
	{
		cout<<p->data<<'\t';
		p=p->pNext ;
	}
		cout<<endl;
		return ;
}

//判空:
bool empt(PSTACK pz)
{
	if(pz->pTop==pz->pBottom )
		return true;
	else
		return false;
}

//4.出栈:
bool pop(PSTACK pz,int *pval)
{
	if(empt(pz))
	return false;
	else
	{
		PNODE out=pz->pTop;
		*pval=out->data ;
		pz->pTop =out->pNext ;
		free(out);
		out=NULL;
		return true;
	}
}

//清栈:
void clear(PSTACK pz,PNODE q)
{
	if(empt(pz))
	{
	cout<<"clear!" ;
	return;
	}
	else
	{
		PNODE p=pz->pTop;
		PNODE q=NULL;
		while(p!=pz->pBottom )
		{
			q=p->pNext ;
			free(p);
			p=q;
		}
		cout<<"clear!"<<endl;
	}
	pz->pTop =pz->pBottom ;
}


int main()
{
	STACK s;
	PNODE w=NULL;
	int val;


	init(&s);
	push(&s,1);
	push(&s,2);
	push(&s,3);
	push(&s,4);
	push(&s,5);
	push(&s,6);
	traverse(&s);

	if(pop(&s,&val))
	{
		cout<<"出栈成功,出栈的元素是"<<val<<'\t';
		cout<<endl;
	}
	else
		cout<<"出栈失败!"<<endl;;
	traverse(&s);
	
	clear(&s,w);
	traverse(&s);
	return 0;
}

凡是满足只能在一端进行插入、删除操作的数据结构类型,并且是后入先出的,我们都可以称它为栈。栈是数据结构最基本的应用,有很多算法的实现是依托于栈来执行的。

猜你喜欢

转载自blog.csdn.net/qq_43595030/article/details/90738223