【数据结构】链栈的基本操作C语⾔完整代码(初始化,判栈空,⼊栈,出栈,
取栈顶元素,求栈长)
链栈的基本操作C语⾔完整代码
⼀、初始化栈
链栈初始化即先构造⼀个空栈,将栈顶指针top所指的头结点的指针域置空。
//初始化
LinkedStack Init_LinkedStack()
{
LinkedStack top=(LinkedStackNode *)malloc (sizeof( LinkedStackNode));
if(top!=NULL)//申请空间成功
top->next=NULL;//设置栈顶指针为空
return top;
}
⼆、判栈空
若栈顶指针top为空,则返回1,否则返回0。
//判栈空
int LinkedStack_Empty(LinkedStack top)
{
if(top->next==NULL)//检查栈顶指针的值
{
return1;//栈S为空,函数返回1
}
else
{
return0;
}
}
三、⼊栈
将数据元素X插⼊链栈的栈顶,将头结点的指针域指向新插⼊的栈顶元。插⼊成功返回1,否则返回0.
//⼊栈
int Push_LinkedStack(LinkedStack top,elemtype x)
//插⼊数据元素x为新的栈顶元素
{
LinkedStackNode * node;
node=(LinkedStackNode *)malloc(sizeof(LinkedStackNode));
if(node==NULL)
{
return0;//申请结点空间失败,插⼊失败,函数返回0
}
else
{
node->data=x;//设置新结点的数据域
node->next=top->next;//设置新结点的指针城
top->next=node;//设置头结点指针城指向新的栈顶元素
return1;//插⼊成功,函数返回1
}
}
四、出栈
删除栈顶数据元素,通过X返回删除数据的值,然后top指针指向下⼀个数据元素。删除成功返回1,否则返回0.
//出栈
int Pop_LinkedStack(LinkedStack top, elemtype *x)
{ LinkedStackNode * node;
if(top->next==NULL)
{
return0;
}
else
{
node=top->next;//将原栈顶数据元素弹出并赋给node
*x=node->data;//将原栈顶数据元素的数据赋值给x
top->next=node->next;//top指向链栈中的下⼀个数据元素
free (node);//释放原栈顶数据元素所占的空间
return1;
}
}
五、取栈顶元素
读取栈顶元素,返回值。
//取栈顶元素
int GetTop_LinkedStack(LinkedStack top)
{
if(top->next)
{
return top->next->data;
}
return-1;
}
六、求栈长
设置计数器,随top指针后移,计数器加1,直到遍历完所有元素。//求栈长
int Length_LinkedStack(LinkedStack top)
{
int count =0;
while(top->next!=NULL)
{
++count;
top=top->next;
}
return count;
}
七、完整代码
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct LinkedStackNode
{
elemtype data;
struct LinkedStackNode * next;
} LinkedStackNode,* LinkedStack;
LinkedStack top;
//初始化
LinkedStack Init_LinkedStack()
{
LinkedStack top=(LinkedStackNode *)malloc (sizeof( LinkedStackNode)); if(top!=NULL)//申请空间成功
if(top!=NULL)//申请空间成功
top->next=NULL;//设置栈顶指针为空
return top;
}
//判栈空
int LinkedStack_Empty(LinkedStack top)
{
if(top->next==NULL)//检查栈顶指针的值
{
return1;//栈S为空,函数返回1
}
else
{
return0;
}
}
//⼊栈
int Push_LinkedStack(LinkedStack top,elemtype x)
//插⼊数据元素x为新的栈顶元素
{
LinkedStackNode * node;
node=(LinkedStackNode *)malloc(sizeof(LinkedStackNode)); if(node==NULL)
{
return0;//申请结点空间失败,插⼊失败,函数返回0
}
else
{
node->data=x;//设置新结点的数据域
node->next=top->next;//设置新结点的指针城
top->next=node;//设置头结点指针城指向新的栈顶元素return1;//插⼊成功,函数返回1
}
}
//求栈长
int Length_LinkedStack(LinkedStack top)
{
int count =0;
while(top->next!=NULL)
{
++count;
top=top->next;
}
return count;
}
//出栈
int Pop_LinkedStack(LinkedStack top, elemtype *x)
{ LinkedStackNode * node;
if(top->next==NULL)
{
return0;
}
else
{
node=top->next;//将原栈顶数据元素弹出并赋给node
*x=node->data;//将原栈顶数据元素的数据赋值给x
top->next=node->next;//top指向链栈中的下⼀个数据元素
free (node);//释放原栈顶数据元素所占的空间
return1;
}
}
//取栈顶元素
int GetTop_LinkedStack(LinkedStack top)
{
if(top->next)
{
return top->next->data;
}
return-1;
}
//主函数
void main()
{基础c语言代码
int i,t,x,a[20];
LinkedStack top=Init_LinkedStack();//初始化栈
x=LinkedStack_Empty(top);//判栈空结果赋值给X
if(x=0)
{
printf("栈为空\n");
}
printf("请依次输⼊5个数,开始⼊栈:\n");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
Push_LinkedStack(top,a[i]);
x=GetTop_LinkedStack(top);
if(x!=-1)
{
printf("当前栈顶元素为%d\n",x);
}
}
printf("⼊栈结束\n");
printf("栈长为%d\n",Length_LinkedStack(top)); printf("开始出栈:\n");
for(i=0;i<5;i++)
{
Pop_LinkedStack(top,&t);
printf("%d",t);
}
printf("\n");
printf("出栈后栈长为%d\n",Length_LinkedStack(top)); }
⼋、程序结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论