[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