用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...