/* 链接栈:类型和界面函数声明 */
/*链接栈:函数实现*/
#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语言描述)汇总: