数据结构源码笔记(C语言):链接栈


/* 链接栈:类型和界面函数声明 */
/*链接栈:函数实现*/

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

typedef int DataType;

struct  Node;					/* 单链表结点 */
typedef  struct Node  *PNode;	/* 指向结点的指针类型 */
struct  Node	
{				/* 单链表结点定义 */
	DataType	info;
	PNode		link;
};

struct LinkStack			/* 链接栈类型定义 */
{
	PNode  top;		/* 指向栈顶结点 */
};
typedef  struct LinkStack  *PLinkStack;	 /* 链接栈类型的指针类型 */



/*创建一空链接栈*/
PLinkStack  createEmptyStack_link(void)
{
   PLinkStack plstack;
   plstack = (PLinkStack )malloc( sizeof(struct LinkStack));
   if (plstack != NULL)
	   plstack->top = NULL;
   else
	   printf("Out of space! \n");  /*创建失败*/  
   return (plstack);
 }


/*判断plstack所指的栈是否为空栈*/
int  isEmptyStack_link( PLinkStack plstack )
{
	return (plstack->top == NULL);
}

/*进栈运算,往plstack所指的栈中插入(或称压入)一个值为x的元素*/
void push_link( PLinkStack plstack, DataType x )
{
	PNode  p;
  	p = (PNode)malloc( sizeof( struct Node ) );
  	if ( p == NULL  )
	    printf("Out of space!\n");
  	else
	{
		p->info = x;
		p->link = plstack->top;
		plstack->top = p;
	}
}

/*出栈运算,从plstack所指的栈中删除(或称弹出)一个元素*/
void  pop_link( PLinkStack plstack )
{ 
	PNode   p;
  	if( isEmptyStack_link( plstack ) )
	    printf( "Empty stack pop.\n" );
  	else
	{
		p = plstack->top;
		plstack->top = plstack->top->link;
		free(p);
	}
}


/*取栈顶元素的值*/
DataType  top_link( PLinkStack plstack )
{ 
	if (plstack->top == NULL ) 
	{
	    printf( "Stack is empty!\n" );
		return -99999;
	}
    else
	    return (plstack->top->info);
}

void displayStack(PLinkStack plstack)//显示当前栈中的元素
{	
    
	PLinkStack ps=plstack;
	printf("当前栈中元素:");
	while (ps->top!= NULL)
	{
		printf("   %d",ps->top->info);
		ps->top=ps->top->link;
	}
	printf("\n");
}


int main()
{
	PLinkStack plstack;
	int i;
	plstack=createEmptyStack_link();
	printf("判断是否空栈:");
	if(isEmptyStack_link(plstack)) printf("是空栈!\n");
	else printf("非空栈!\n");
	printf("将数据1、2、3、4推入栈中:\n");
	for(i=1;i<5;i++)
		push_link(plstack,i);	
    printf("显示当前栈顶数据: %d \n",top_link(plstack));	
    printf("弹出一次栈顶数据:\n");
	pop_link(plstack);
	displayStack(plstack);
	return 0;
}

数据结构源码笔记(C语言描述)汇总:

数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

数据结构源码笔记(C语言):直接插入排序

数据结构源码笔记(C语言):直接选择排序

数据结构源码笔记(C语言):置换-选择算法

数据结构源码笔记(C语言):Huffman树字符编码

数据结构源码笔记(C语言):Josephus问题之顺序表

数据结构源码笔记(C语言):Josephus问题之循环链接表

数据结构源码笔记(C语言):多项式合并

数据结构源码笔记(C语言):二叉树之叶子结点旋转销毁

数据结构源码笔记(C语言):哈夫曼树

数据结构源码笔记(C语言):集合的位向量表示

数据结构源码笔记(C语言):链接队列

数据结构源码笔记(C语言):链接栈

数据结构源码笔记(C语言):线性表的单链表示

数据结构源码笔记(C语言):线性表的顺序表示

数据结构源码笔记(C语言):栈的基本操作

数据结构源码笔记(C语言):中缀表达式

数据结构源码笔记(C语言):希尔插入排序

数据结构源码笔记(C语言):索引文件建立和查找

数据结构源码笔记(C语言):冒泡排序

数据结构源码笔记(C语言):快速排序

数据结构源码笔记(C语言):可变长度字符串的快速排序

数据结构源码笔记(C语言):基数排序

数据结构源码笔记(C语言):二路归并排序

数据结构源码笔记(C语言):堆排序

数据结构源码笔记(C语言):二叉树搜索树Kruskal

数据结构源码笔记(C语言):二叉搜索树Prim

数据结构源码笔记(C语言):最短路径弗洛伊德算法

数据结构源码笔记(C语言):深度、广度优先生成树

数据结构源码笔记(C语言):邻接矩阵转化邻接表

数据结构源码笔记(C语言):统计字符串中出现的字符及其次数

数据结构源码笔记(C语言):顺序查找

数据结构源码笔记(C语言):哈希表的相关运算算法

数据结构源码笔记(C语言):分块法查找

数据结构源码笔记(C语言):二分查找

数据结构源码笔记(C语言):二叉树遍历

数据结构源码笔记(C语言):二叉平衡树的相关操作算法

数据结构源码笔记(C语言):二叉排序树的基本操作算法

数据结构源码笔记(C语言):B树的相关运算算法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半个冯博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值