用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

//假设有二个栈共同使用一块顺序存储的空间,为简单起见可设为共同使用数组 int

2012-10-27 作者: 上帝是男孩举报

[c]代码库

//假设有二个栈共同使用一块顺序存储的空间,为简单起见可设为共同使用数组 int
//buffer[200]。它们的栈底分别设在数组的两端,而栈顶指针在进行插入操作时,向
//中间方向移动。请给出进出栈的程序.

#include<stdio.h>
#include<stdlib.h>
#include"test3.h"
#include<string.h>
#define Maxsize 200
int main()
{
	int i,flat=1,len1,len2,n;
	char str[Maxsize],e;
	SqStack *A,*B;
	A=CreateSqStack();//创建栈A
	B=CreateSqStack();//创建栈B

	InitSqStackA(A);//初始化栈A
	InitSqStackB(B);//初始化栈B

	printf("对栈A输入一组字符:\n");
	gets(str);
	len1=strlen(str);//len1 用于存放栈A的数据元素的个数
	for(i=0;i<len1;i++)
	{
        flat=Judge(A,B);//判断存储空间是否已经满了,若满,则返回ERROR,否则,返回OK
		if(!flat)
		{
			printf("存储空间已满!\n");
			return 0;
		}
		PushSqStackA(A,str[i]);//入栈A
	}

	printf("对栈B输入一组字符:\n");
	gets(str);
	len2=strlen(str);//len2 用于存放栈B的数据元素的个数
	for(i=0;i<len2;i++)
	{
		flat=Judge(A,B);//判断存储空间是否已经满了,若满,则返回ERROR,否则,返回OK
		if(!flat)
		{
			printf("存储空间已满!\n");
			return 0;
		}
		PushSqStackB(B,str[i]);//入栈B
	}

    printf("对栈A输出几个数:\n");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		PopSqStackA(A,&e);//出栈A
		printf("%c",e);
	}
	printf("\n");

	printf("对栈B输出几个数:\n");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		PopSqStackB(B,&e);//出栈B
		printf("%c",e);
	}
	printf("\n");
	return 0;
}







///////////////////////////////////////
/*           test.cp                */
/*     filename:test.cpp            */
/*     description:test.h的实现文件 */
/*     designer:zhu jian            */
/*     data:12-10-26                */
///////////////////////////////////////


#include"stdio.h"
#include"stdlib.h"
#include"test3.h"
#define Maxsize 200


SqStack *CreateSqStack(void)//定义一个栈的指针
{
	SqStack *S;
	S=(SqStack *)malloc(sizeof(SqStack));
	if(!S)
		return NULL;

	S->top=0;
	return S;
}

unsigned char InitSqStackA(SqStack *S)//初始化栈A
{
	SqStack *p;
	p=S;
	if(!S)
		return ERROR;

	S->top=0;
	return OK;
}

unsigned char InitSqStackB(SqStack *S)//初始化栈B
{
	SqStack *p;
	p=S;
	if(!S)
		return NULL;

	p->top=200;
	return OK;
}

unsigned char PushSqStackA(SqStack *S,elemtype e)//将数据元素插入栈A中(进栈)
{
	SqStack *p;
	p=S;
	if(!S)
		return ERROR;

	p->data[p->top]=e;
	p->top++;
	return OK;
}

unsigned char PushSqStackB(SqStack *S,elemtype e)//将数据元素插入栈B中(进栈)
{
	SqStack *p;
	p=S;
	if(!S)
		return ERROR;

	p->data[p->top-1]=e;
	p->top--;
	return OK;
}

unsigned char PopSqStackA(SqStack *S,elemtype *e)//出栈A
{
	SqStack *p;
	p=S;
	if(!S)
		return ERROR;

	if(p->top == 0)
	{
		printf("栈A已空!\n");
		return ERROR;
	}
	*e=p->data[p->top-1];
	p->top--;
	return OK;
}

unsigned char PopSqStackB(SqStack *S,elemtype *e)//出栈B
{
	SqStack *p;
	p=S;
	if(!S)
		return ERROR;

    if(p->top == Maxsize)
	{
		printf("栈B已空!\n");
		return ERROR;
	}
	*e=p->data[p->top];
	p->top++;
	return OK;
}

unsigned char Judge(SqStack *A,SqStack *B)//判断栈A与栈B是否已将空间占满
{
	SqStack *p,*q;
	p=A;
	q=B;
	if(!A || !B)
		return ERROR;

	if(p->top < q->top )
		return OK;
	else
		return ERROR;
}






///////////////////////////////////////
/*           test.h                 */
/*     filename:test.h              */
/*     description:test.h的头文件   */
/*     designer:zhu jian            */
/*     data:12-10-26                */
///////////////////////////////////////


#ifndef _DATA_STRUCTURE_TEST_H_
#define _DATA_STRUCTURE_TEST_H_


#ifndef ERROR
#define ERROR 0
#endif 

#ifndef OK
#define OK 1
#endif

#ifndef NULL
#define NULL 0
#endif 


#define Maxsize 200//定义最大数据元素量是200
typedef char elemtype;//定义用elemtype取代char


typedef struct{//定义栈的结构体
	elemtype data[Maxsize];
	int top;
}SqStack;


SqStack *CreateSqStack(void);//定义一个栈的指针

unsigned char InitSqStackA(SqStack *S);//初始化栈A

unsigned char InitSqStackB(SqStack *S);//初始化栈B

unsigned char PushSqStackA(SqStack *S,elemtype e);//将数据元素插入栈A中(进栈)

unsigned char PushSqStackB(SqStack *S,elemtype e);//将数据元素插入栈B中(进栈)

unsigned char PopSqStackA(SqStack *S,elemtype *e);//出栈A

unsigned char PopSqStackB(SqStack *S,elemtype *e);//出栈B

unsigned char Judge(SqStack *A,SqStack *B);//判断栈A与栈B是否已将空间占满


#endif





网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...