C语言栈实现:顺序栈-创新互联

目录:
  • 概念理解:
  • 顺序栈结构体:
  • 初始化顺序栈:
  • 判栈空 :
  • 入栈:
  • 出栈:
  • 读栈顶元素:
  • 测试:

创新互联是一家专注网站建设、网络营销策划、小程序设计、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立10年以来,已经为上1000家成都玻璃贴膜各业的企业公司提供互联网服务。现在,服务的上1000家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。概念理解:

栈是一种操作受限的线性表,LIFO。
栈:逻辑结构
顺序栈:使用顺序存储方式实现的栈

栈空条件:S.top == -1
栈满条件:S.top == MaxSize-1
栈长:S.top+1
非空条件下,top始终指向栈尾元素。

顺序栈结构体:
#define MaxSize 50
//栈的顺序存储结构 
typedef struct{//数据用数组存放 
	int data[MaxSize];
	//存储数组最后一个元素的下标,代表栈顶指针 
	int top;
} SqStack;
初始化顺序栈:
//初始化顺序栈,将栈顶指针置为-1 
void InitStack(SqStack &S){S.top = -1; 
}
判栈空 :
//判栈空 
bool StackEmpty(SqStack S){if(S.top == -1){return true;
	}
	return false;
}
入栈:
//入栈 
bool Push(SqStack &S,int x){//判断栈满,S.top范围:-1,0~49 
	if(S.top == MaxSize-1){return false;
	}
	//首先top+1,然后入栈 
	S.data[++S.top] = x;
	return true;	
}
出栈:
//出栈,只是逻辑结构上的出栈,top--,存储结构上看出栈的元素还在内存中 
bool Pop(SqStack &S,int &x){//判断栈满,S.top范围:-1,0~49 
	if(S.top == MaxSize-1){return false;
	}
	//首先出栈,然后top-1 
	S.data[S.top--];
	return true;
}
读栈顶元素:
//读栈顶元素 
bool GetTop(SqStack S,int &x){//判栈空 
	if(S.top == -1){return false;
	}
	//top即栈顶元素的下标 
	x = S.data[S.top];
	return true; 
}
测试:
#include#include//使用malloc和free关键字需要引入这个库

#define MaxSize 50
//栈的顺序存储结构 
typedef struct{//数据用数组存放 
	int data[MaxSize];
	//存储数组最后一个元素的下标,代表栈顶指针 
	int top;
} SqStack;

//初始化顺序栈,将栈顶指针置为-1 
void InitStack(SqStack &S){S.top = -1; 
}

//判栈空 
bool StackEmpty(SqStack S){if(S.top == -1){return true;
	}
	return false;
}

//入栈 
bool Push(SqStack &S,int x){//判断栈满,S.top范围:-1,0~49 
	if(S.top == MaxSize-1){return false;
	}
	//首先top+1,然后入栈 
	S.data[++S.top] = x;
	return true;	
} 

//出栈,只是逻辑结构上的出栈,top--,存储结构上看出栈的元素还在内存中 
bool Pop(SqStack &S,int &x){//判断栈满,S.top范围:-1,0~49 
	if(S.top == MaxSize-1){return false;
	}
	//首先出栈,然后top-1 
	S.data[S.top--];
	return true;
} 

//读栈顶元素 
bool GetTop(SqStack S,int &x){//判栈空 
	if(S.top == -1){return false;
	}
	//top即栈顶元素的下标 
	x = S.data[S.top];
	return true; 
}

//打印栈 
void Print(SqStack S){printf("栈内元素:");	
	for(int i=0;i<=S.top;i++){printf("%d ",S.data[i]);
	}
	printf("栈顶指针:%d\n",S.top);
} 

int main(){//声明一个结构体类型的顺序栈元素 
	SqStack S;
	//初始化 
	InitStack(S);
	printf("当前栈是否为空:%d\n",StackEmpty(S));
	//入栈
	Push(S,3); 
	Push(S,2);
	Push(S,4);
	Push(S,6);	
	printf("当前栈是否为空:%d\n",StackEmpty(S));
	//读栈顶元素
	int x = 0; 
	GetTop(S,x);
	printf("当前栈顶元素:%d\n",x);
	//出栈
	Pop(S,x);
	printf("出栈元素:%d\n",x);
	GetTop(S,x);
	printf("当前栈顶元素:%d\n",x);
	//打印栈
	Print(S); 
}

在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章标题:C语言栈实现:顺序栈-创新互联
标题URL:http://cdiso.cn/article/espge.html

其他资讯