数据结构:栈

栈(stack) 是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top) ,相应地,表头端称为栈底(bottom) 。不含元素的空表称为空栈。
 

照搬代码

#include<stdio.h>
#include<malloc.h>

#define STACK_MAX_SIZE 10

/*
*Linear stack of integers. The key is data.
*/

typedef struct CharStack{
	int top;
	int data[STACK_MAX_SIZE];
}*CharStackPtr;

/*
*Output the stack.
*/

void outputStack(CharStackPtr paraStack){
	for(int i=0;i<=paraStack->top;i++){
		printf("%c",paraStack->data[i]);
	}//of for i
	printf("\r\n");
}//of outputStack

CharStackPtr CharStackInit(){
	CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(CharStack));
	resultPtr->top = -1;
	
	return resultPtr; 
}//of CharStackInit

void push(CharStackPtr paraStackPtr,int paraValue){
	//step 1.space check
	if(paraStackPtr->top>=STACK_MAX_SIZE - 1)
	{
		printf("Cannot push element:stack full.\r\n");
		return;
	}//of if
	
	//step 2.update the top.
	paraStackPtr->top ++;
	
	//step 3.push element.
	paraStackPtr->data[paraStackPtr->top] = paraValue;
}//of push

/*
*pop an element from the stack
*@return the poped value.
*/

char pop(CharStackPtr paraStackPtr){
	//step 1.space check
	if(paraStackPtr->top<0){
		printf("Cannot pop element:stack empty.\r\n");
		return '\0';
	}//of if
	
	//step 2.update the top.
	paraStackPtr->top --;
	
	//step 3.push element.
	return paraStackPtr->data[paraStackPtr->top + 1];
}//of pop
/*
*test the push function
*/

void pushPopTest(){
	printf("----pushPopTest begins.----\r\n");
	//initialize
	
	CharStackPtr tempStack = CharStackInit();
	printf("After initialization,the stack is: ");
	outputStack(tempStack);
	
	//pop
	for(char ch='a';ch<'m';ch++){
		printf("pushing %c.\r\n,ch");
		push(tempStack,ch);
		outputStack(tempStack); 
	} //of for i
	printf("----pushpoptest ends.----\r\n");
}//of pushpoptset

/*
*the entrance
*/

int main()
{
	pushPopTest();
}//of main

运行截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值