【数据结构】栈的存储结构(一)顺序栈

顺序栈

  • 栈分为顺序栈和链栈。
  • 顺序栈用数组存数据,整型指向栈顶。
  • 特点就是先入先出原则。
  • 栈在逻辑上是线性结构。

代码收获

  • 出栈需要个元素获取出栈的数据,实际并没有把此数据从栈顶拿走。
  • 操作上采用传地址的方式把出栈的值传给*地址。
  • 初始化思路跟线性表顺序存储一样。
# include <stdio.h>
# include <stdlib.h>
//栈有2种存储结构,顺序栈和链栈 
//顺序栈为数组存储的栈,链栈为链表链接存储
//其中需要有个top指针,指向栈顶元素 
#define MAXSIZE 100 
//做结构体 
typedef struct Stack{
	int top;
	char ele[MAXSIZE]; 
}stack,*stackp;
//初始化 
void InitialStack(stackp* ST){
	*ST=(stackp)malloc(sizeof(stack));
	(*ST)->top = -1;//栈顶指针为-1 说明是空栈,和顺序存储思想相似 
}
//入栈 
int PushStack(stackp ST){
	printf("输入需要插入的元素,按$退出\n");
	int flag = 1;
	while(flag){
		char c;
		c = getchar();
		if(c!='$'){
			if(ST->top+1==MAXSIZE){
				printf("满栈!\n");
				return 1; 
			}else{
			ST->ele[(ST->top)+1]=c;//往栈顶上扔一个元素 
			ST->top+=1;	//指针上移		
			}		
		} else{
			flag = 0;
		} 
	}getchar();
	return 0;
}
//出栈,单个元素 
int PopStack(stackp ST,char *x){
	if (ST->top==-1){
	printf("栈空\n");
	return 1;}
	else{
	*x=ST->ele[ST->top];
	ST->top--; 
	return 0;}
}
//打印栈内元素
void PrintStack(stackp ST){
	int mov=ST->top;
	printf("栈内元素为\n");
	for(;mov>-1;mov--){
		printf("%c",ST->ele[mov]);
	}
}
void main(){
	stackp ST;
	InitialStack(&ST);
    PushStack(ST);
    PrintStack(ST);
    char x;
    PopStack(ST,&x);//把出的元素保存在x里面 
    printf ("出栈元素为%c\n",x);
    PrintStack(ST);
}

猜你喜欢

转载自blog.csdn.net/yehuozhili/article/details/82930090