懒猫老师-数据结构-(1)堆栈(顺序栈) (作业提交)

#include <stdio.h>
#include <stdlib.h>
#define MAX  100//定义栈最大值常量
typedef struct stack
{
	char* data;//属性:线性表
	int size;//川属性:堆栈的实际大小
	int top;/// 属性:栈顶
}Stack;
void initStack(Stack* s);// 初始化
void destroyStack(Stack * s);// 销毁栈
void push(Stack* s, char ch);//成员函数:入栈
char pop(Stack* s);//成员函数:出栈并返回栈顶元素
char getTop(Stack* s);//成员函数:获得栈顶元素(不出栈)
int isEmpty(Stack s);//成员函数:栈是否为空
int isFull(Stack s);//∥成员函数:栈是否满
int setNull(Stack s);// 设置栈为空


int main()
{
	Stack s; 
	initStack(&s); 
	char ch;
	printf("请输入字符串(以#结束):");
	while ((ch = getchar()) != '#')
	{ 
		if (ch == '<')
		{ 
		if (!isEmpty(s)) 
	{ 
			pop(&s); 
	} 
		
		}
		else if (ch=='@')
		{
			s.top = 0;
			*s.data = NULL;
			s.size = 0;
		}
		else 
		{ 
			push(&s, ch); 
		} 
	}
	printf("处理后的字符串为:");
	int i = 0;
	char str[100] = { 0 };

	while (!isEmpty(s))
	{ 
		str[i] = pop(&s);
		i++;
	} 
	//正向输出
	for (int j=i-1;j>=0;j--)
	{
		printf("%c", str[j]);
	}
	destroyStack(&s); 
		return 0;
}


void initStack(Stack* s)//初始化栈
{
	s->size = 10;
	s->top = -1;
	s->data = (char*)malloc(sizeof(Stack));

}

void destroyStack(Stack* s)//删除栈
{
	
	free(s->data);

	
}

void push(Stack* s, char ch)
{
	if (isFull(*s))
	{
		s->top += 1;
		s->data[s->top] = ch;
		
	}
	else
	{
		return ;
	}
}

char pop(Stack* s)
{
	if (isEmpty(*s))
	{
		return;
	}
	return s->data[s->top--];
	
}

char getTop(Stack* s)
{
	if (isEmpty(*s))
	{
		return;
	}
	return s->data[s->top];
}

int isEmpty(Stack s)
{
	return s.top == -1; //栈为空返回真,否则返回假
}

int isFull(Stack s)
{
	if (s.top+1== MAX)
	{
		return -1;
	}
	return 1;
}

int setNull(Stack s)//设置栈为空
{
	return s.top = -1;
}

上代码先  感谢老师。教得很好

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值