链栈的实现:⑴ 建立一个空栈; ## ⑵ 对已建立的栈进行插入、删除、取栈顶元素等基本操作。

链栈的实现

⑴ 建立一个空栈;

⑵ 对已建立的栈进行插入、删除、取栈顶元素等基本操作。

#include
#include //malloc函数需要用到 

typedef struct Node
{
	int data;
	struct Node *next;
}Node,*LinkStack;//LinkStack为结构体指针类型的别名  用他声明的即为结构体指针变量 
 
//链栈的初始化 
 void initStack(LinkStack *top)  //形参是指向结构体指针变量的一个指针 
{   
	*top=(Node*)malloc(sizeof(Node));  /*带头结点的单链表  
	*top就是主函数中的top结构体指针变量的地址 这里是将主函数中的top指针改变成头结点的样式*/ 
	(*top)->next=NULL; //初始化即top头结点的next域为空          
} 

//进栈 ,将元素压入栈中 
void Push(LinkStack top,int n)
{		
	Node *temp;
	temp=(Node *)malloc(sizeof(Node));  //结点申请空间 
	temp->data=n;
	temp->next=top->next;          //采用头插法存储元素 
	top->next=temp; 
} 
//栈顶元素出栈 
int Pop(LinkStack top,int *ptr)         
{           
	int a;
	Node *temp;
	if((*top).next==NULL)   //指针引用结构体成员的方式为 (*指针).成员  或者  指针->成员 
	{               //栈为空,出栈失败 
		printf("下溢错误,删除失败\n");
		return 0;
	}
	else
	{
		temp=top->next;
		a=temp->data;
		top->next=temp->next;
		free(temp);
		*ptr=a;
		return 1;
	}  
}

//获读取栈顶元素 
int GetTop(LinkStack top,int *ptr)        
{    
	if(top->next==NULL)              //栈为空,读取栈顶元素失败 
	{ 
		printf("下溢错误,取栈顶失败\n");
		return 0;
	}
	else
	{
		*ptr=top->next->data;           //读取栈顶元素,不出栈 
		return 1;
	}
}


//判空操作 
int Empty(LinkStack top)
{
	if(top->next == NULL)
	return 1;
	else
	return 0;
}

//销毁链栈 
void DestoryStack(LinkStack top)
{
	Node *p = top;
	while(top!=NULL)
	{
		top = top->next;
		free(p);
		p = top;
	}
}
 
int main()
{
	int x;
	LinkStack top;  /*定义一个结构体指针top*/
	initStack(&top); /*top指针的地址传给它   指针传递   改变值  */
	/*类似于   x=5;fun(x); fun(int x){x=2;}这时候不改变x的值  在主函数中x的值仍为5  */ 
	/*x=5; fun(&x);   fun(int *x){*x=2};}  这时候改变了x的值  在主函数里x的值变为了2*/
	printf("对15和10执行入栈操作\n");
	Push(top,15);
	Push(top,10); 
	if(GetTop(top,&x)==1)
		printf("当前栈顶元素为:%d\n",x);
	if(Pop(top,&x)==1)
		printf("执行一次出栈操作,删除元素:%d\n",x);
	if(GetTop(top,&x)==1)
		printf("当前栈顶元素为:%d\n",x);
	printf("请输入待插入元素:");
	scanf("%d",&x);
	Push(top,x);
	if(Empty(top)==1)
		printf("栈为空"); 
	else
		printf("栈非空");
	DestoryStack(top);
	return 0;
}

你可能感兴趣的:(链栈的实现:⑴ 建立一个空栈; ## ⑵ 对已建立的栈进行插入、删除、取栈顶元素等基本操作。)