Math Dash的栈程序

栈是限定仅在表尾进行插入或删除操作的线性表,表尾为栈顶,表头为栈底

顺序栈的定义如下:

typedef struct
{
	int id;
	char password[300];
}SElemtype;
struct SqStack
{
	SElemtype *data;
	int stacksize,length;
};

最大值:

#define MAXSIZE 500

1.初始化

struct SqStack *InItStack()
{
	struct SqStack *a;//*创建顺序栈
	a=(struct SqStack*)malloc(sizeof(struct SqStack));
	a->data=(SElemtype*)malloc(0);//*空顺序栈的内存为0
	a->length=0;//*长度为0
	a->stacksize=MAXSIZE;//*设为最大长度
	if(!a)//*如果初始化失败!
	{
		printf("栈初始化失败!\n");
	}
	return a;//*返回空顺序栈
}

 2.入栈

void Push(struct SqStack *a,SElemtype e)
{
	if(a->length==a->stacksize)//*如果栈满
	{
		printf("栈满!\n");
		return;
	}
	a->data[a->length]=e;//*入栈
	a->length=a->length+1;
	printf("入栈成功!\n");
}

3.出栈

void Pop(struct SqStack *a,SElemtype op)
{
	if(a->length==0)//*如果数据元素为0
	{
		printf("出栈失败!\n");
		return;
	}
	a->data[a->length-1]=op;//*op表示空结点
	a->length--;//*节点数量增加
	printf("出栈成功!\n");
}

4.取栈顶元素

void PutsStack(struct SqStack *a)
{
	if(a->length==0)//*如果结点数量为0
	{
	    printf("无信息\n");
	}
	else
	{
		printf("id:%d\tpassword:%s\n",a->data[a->length-1].id,a->data[a->length-1].password);//*显示栈顶数据
	}
}

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAXSIZE 500
typedef struct
{
	int id;
	char password[300];
}SElemtype;
struct SqStack
{
	SElemtype *data;
	int stacksize,length;
};
struct SqStack *InItStack()
{
	struct SqStack *a;
	a=(struct SqStack*)malloc(sizeof(struct SqStack));
	a->data=(SElemtype*)malloc(0);
	a->length=0;
	a->stacksize=MAXSIZE;
	if(!a)
	{
		printf("栈初始化失败!\n");
	}
	return a;
}
void Push(struct SqStack *a,SElemtype e)
{
	if(a->length==a->stacksize)
	{
		printf("栈满!\n");
		return;
	}
	a->data[a->length]=e;
	a->length=a->length+1;
	printf("入栈成功!\n");
}
struct SqStack *GetsStack()
{
	SElemtype *e;
	e=(SElemtype*)malloc(sizeof(SElemtype));
	char a[300],b[300];
	printf("请输入id:");
	for(;;)
	{
		gets(a);
		int c;
		for(c=0;(c<strlen(a))&&(isdigit(a[c]))&&(strlen(a)<=20);c++);
		if(c!=strlen(a))
		{
			printf("输入错误!");
		}
		else if(strlen(a)==0)
		{
			printf("内容不能为空!");
		}
		else
		{
			break;
		}
		printf("请重新输入,重新输入的内容为:");
	}
	printf("请输入密码:");
	for(;;)
	{
		gets(b);
		if(strlen(b)==0)
		{
			printf("内容不能为空!");
		}
		else if(strlen(b)>20)
		{
			printf("内容过长!"); 
		}
		else
		{
			break;
		}
		printf("请重新输入,重新输入的内容为:");
	}
	e->id=atoi(a);
	strcpy(e->password,b);
	return e;
}
void Windows_system()
{
	struct SqStack *a;
	SElemtype op;
	a=InItStack();
	if(!a)
	{
		return;
	}
	for(;;)
	{
		printf("1.入栈\n2.出栈\n3.取栈顶元素\n4.退出\n");
		char b[10000];
		for(;;)
		{
			gets(b);
			if((strcmp(b,"1")==0)||(strcmp(b,"3")==0)||(strcmp(b,"2")==0)||(strcmp(b,"4")==0))
			{
				break;
			}
			else if(strlen(b)==0)
			{
				printf("内容不能为空,");
			}
			else
			{
				printf("输入错误,");
			}
			printf("请重新输入,重新输入的内容为:");
		}
		if(strcmp(b,"1")==0)
		{
			op=a->data[a->length];
			SElemtype *c;
			c=GetsStack();
			Push(&(*a),*c);
		}
		if(strcmp(b,"2")==0)
		{
			Pop(&(*a),op);
		}
		if(strcmp(b,"3")==0)
		{
			PutsStack(&(*a));
	    }
	    if(strcmp(b,"4")==0)
	    {
	    	return;
		}
	    system("pause");
	}
}
void PutsStack(struct SqStack *a)
{
	if(a->length==0)
	{
	    printf("无信息\n");
	}
	else
	{
		printf("id:%d\tpassword:%s\n",a->data[a->length-1].id,a->data[a->length-1].password);
	}
}
void Pop(struct SqStack *a,SElemtype op)
{
	if(a->length==0)
	{
		printf("出栈失败!\n");
		return;
	}
	a->data[a->length-1]=op;
	a->length--;
	printf("出栈成功!\n"); 
}
void Windows_name_system()
{
	char a[]="Math Dash的栈程序";
	char b[strlen(a)+6];
	sprintf(b,"title %s",a);
	system(b);
	puts(a);
}
void f()
{
	Windows_name_system();
	Windows_system();
	system("pause");
}
main()
{
	f();
	return 0;
}

程序运行结果如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值