栈的操作
链栈的操作基本同线性链表的操作,操作位仅限于头结点。
顺序栈的基本操作:构造顺序栈以及取栈顶元素,压栈,判空,销毁栈等,在此列出操作代码(C语言实现)。
头文件以及类型定义
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
typedef struct
{
ElemType *Data;
int Top;//Top为栈顶指示器,用来判定栈顶情况
}Linear_Sqstack;//动态定义顺序栈(顺序结构)
typedef struct StackNode
{
ElemType Data;
struct StackNode *next;
}Chain_Sqstack;
//链栈(实质为仅在头节点进行插入和删除的单链表,操作在第二章复习.cpp里已体现)
//链队,操作时需定义队首指针和队尾指针,剩余操作同第二章复习.cpp
typedef struct
{
ElemType Data;
int Front;//队首指示器
int Rear;//队尾指示器
}Linear_Queue;//顺序队
初始化栈
Linear_Sqstack *Init(int Length_Defined)
{
Linear_Sqstack *p=(Linear_Sqstack *)malloc(sizeof(Linear_Sqstack));
p->Data=(int *)malloc(sizeof(int)*Length_Defined);
p->Top=-1;
return p;
}
压栈
void Push(Linear_Sqstack *p,ElemType Data,int Length_Max)
{
if(p->Top>=Length_Max-1)
{
printf("the stack has already been full.");
return;
}
p->Data[++p->Top]=Data;
}
取出栈顶元素
ElemType Pop(Linear_Sqstack *p)
{
if(p->Top==-1)
{
printf("the stack has already been empty.");
return 0;
}
ElemType Data_Poped=p->Data[p->Top];
p->Top--;
return Data_Poped;
}
构造顺序栈
Linear_Sqstack *Create(int Length_Defined)
{
Linear_Sqstack *p=Init(Length_Defined);
ElemType Data;
for(int i=0;i<Length_Defined;i++)
{
printf("input your data:");
scanf("%d",&Data);
Push(p,Data,Length_Defined);
}
return p;
}
获取栈顶元素(未取出)
ElemType GetTop(Linear_Sqstack *p)
{
if(p->Top==-1)
{
printf("the stack has already been empty.");
return 0;
}
return(p->Data[p->Top]);
}
销毁与判空
void Destroy(Linear_Sqstack *p)
{
free(p);
}
bool IsEmpty(Linear_Sqstack *p)
{
return(p->Top==-1);
}
打印顺序栈
void PrintStack(Linear_Sqstack *p)
{
for(int i=0;i<=p->Top;i++)
printf("%d ",p->Data[i]);
printf("\n");
}
测试主函数
int main()
{
Linear_Sqstack *MyStack;
int Length;
int TestData;
printf("input the length of your stack:");
scanf("%d",&Length);
MyStack=Create(Length);
PrintStack(MyStack);
TestData=Pop(MyStack);
printf("the result of stack-Poped is:%d\n",TestData);
PrintStack(MyStack);
TestData=GetTop(MyStack);
printf("the result of stack-GetToped is:%d\n",TestData);
PrintStack(MyStack);
Push(MyStack,TestData,Length);
printf("the result of stack-Pushed is:%d\n",TestData);
PrintStack(MyStack);
return 0;
}