注册 登录
编程论坛 数据结构与算法

其他可无视,从main看起,main函数很简单,为什么cout出一个"?"号?

最左边那个 发布于 2010-05-07 14:26, 931 次点击
#include<iostream.h>

typedef char datatype;
const int maxsize=100;
struct sqstack
{
    datatype data[maxsize];
    int top;
};

void init_sqstack(sqstack & sq);
int empty_sqstack(sqstack & sq);
int push_sqstack(sqstack & sq,datatype x);
int pop_sqstack(sqstack & sq,datatype x);
void creat_sz(char * &yh,int n);
void Output(char *pa,int n);


void main()
{
    sqstack A;
    init_sqstack(A);
    char *yh=NULL,ch;
    //int n;
    //cin>>n;
    //creat_sz(yh,n);
    //Output(yh,n);
    push_sqstack(A,'1');
    pop_sqstack(A,ch);
    cout<<ch<<endl;
   
   




   

}


void init_sqstack(sqstack  & sq)
{
    sq.top=-1;
}
int empty_sqstack(sqstack & sq)
{
    if(sq.top==-1)  return 1;
    else return 0;
}

int push_sqstack(sqstack & sq,datatype x)
{

    if(sq.top==maxsize-1)
    {
        cout<<"栈满,不能进栈!\n";
        return 0;   
    }
   
    else
    {
        
        sq.data[(sq.top)++]=x;

   
        
        
        return 1;
    }
}

int pop_sqstack(sqstack & sq,datatype x)
{
    if(sq.top==-1)
    {
        cout<<"栈空,不能退栈!\n";
        return 0;
    }
    else
    {
        x=sq.data[sq.top--];
        return 1;
    }

}

void creat_sz(char * &yh,int n)
{
   
    int i=0;
    yh=new char[n+1];
    while(i<n)
    {
        cin>>yh[i];
        i++;
    }
}

void Output(char *pa,int n)
{
    if(pa==NULL)
    {cout<<" allocation faiure\n";}

    for(int i=0;i<n;i++)   
    {
        cout<<pa[i];
    }
    cout<<endl;

}
3 回复
#2
2010-05-07 16:55
1.首先楼主在pop函数里面要传地址.
2.其次取s.top的值应该改为--s.top
程序代码:

#include<iostream.h>
typedef char datatype;
const int maxsize=100;
struct sqstack
{
    datatype data[maxsize];
    int top;
};
void init_sqstack(sqstack & sq);
int empty_sqstack(sqstack & sq);
int push_sqstack(sqstack & sq,datatype x);
int pop_sqstack(sqstack & sq,datatype *x);//声明成指针
void creat_sz(char * &yh,int n);
void Output(char *pa,int n);

void main()
{
    sqstack A;
    init_sqstack(A);
    char *yh=NULL,ch;
    //int n;
   
//cin>>n;
   
//creat_sz(yh,n);
   
//Output(yh,n);
    push_sqstack(A,'1');
    pop_sqstack(A,&ch);
    cout<<ch<<endl;

 
  


  

}

void init_sqstack(sqstack  & sq)
{
    sq.top=-1;
}
int empty_sqstack(sqstack & sq)
{
    if(sq.top==-1)  return 1;
    else return 0;
}
int push_sqstack(sqstack & sq,datatype x)
{
    if(sq.top==maxsize-1)
    {
        cout<<"栈满,不能进栈!\n";
        return 0;
    }

 
    else
    {
      
        sq.data[(sq.top)++]=x;

 
      
      
        return 1;
    }
}
int pop_sqstack(sqstack & sq,datatype *x)
{
    if(sq.top==-1)
    {
        cout<<"栈空,不能退栈!\n";
        return 0;
    }
    else
    {
        *x=sq.data[--sq.top];//先减一再取值
        return 1;
    }
}
void creat_sz(char * &yh,int n)
{

 
    int i=0;
    yh=new char[n+1];
    while(i<n)
    {
        cin>>yh[i];
        i++;
    }
}
void Output(char *pa,int n)
{
    if(pa==NULL)
    {cout<<" allocation faiure\n";}
    for(int i=0;i<n;i++)
    {
        cout<<pa[i];
    }
    cout<<endl;
}


#3
最近不在2010-05-07 22:52
程序代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>

const int nlen = 4;   //分配初始内存大小
const int nadd = 2;   //内存不足,增加内存

struct stack
{
    int *pa;
    int *pb;
    int nsize;
};

void create(stack &s);
void push(stack &s,int e);   //插入元素
void pop(stack &s, int &e);  //删除元素
bool empty(stack &s);        //判断栈是否为空
void destory(stack &s);       //销毁栈

int main(int argc, char* argv[])
{
    while(1)
    {
        stack sql;
        create (sql);
        
        cout<<"please input a number:"<<endl;
        
        int nt;
        int e ;
        cin>>nt;

        if(0 == nt)    //当输入0时,退出循环
        {
            return 0;
        }
        
        while(nt)
        {
            push(sql, nt%8);   //10进制数除以8,余数进栈
            nt = nt/8;
        }
        
        while(!empty(sql))    //余数出栈
        {
            pop(sql, e);
            cout<<e;
        }         
        cout<<endl;
        free(sql.pa);
        //system("cls");
        
        
//delete [] sql.pa;
    }
    return 0;   
}

void create(stack &s)
{
    //s.pa = new int[nlen];
    s.pa = (int *)malloc(nlen * sizeof(int));
    if(!s.pa)
    {
        return ;
    }
    s.pb = s.pa;
    s.nsize = nlen;
}

void push(stack &s, int e)
{
    if(s.pb - s.pa >= s.nsize)
    {
        //delete [] s.pa;
        
//s.pa = NULL;
        
//s.pa = new int[(s.nsize + nadd)];
        s.pa = (int *)realloc(s.pa,(s.nsize + nadd) * sizeof(int));
        
        if(!s.pa)
        {
            cout<<"memory error!"<<endl;
        }
        s.pb = s.pa + s.nsize;   
        s.nsize += nadd;   
    }
    *(s.pb++) = e;
}

void pop(stack &s, int &e)
{
    if(s.pa == s.pb)
    {
        cout<<"error"<<endl;
    }
    e = *(--s.pb);
}

bool empty(stack &s)
{
    if(s.pa == s.pb)
    {
        return true;
    }
    else
        return false;
}

void destory(stack &s)
{

}
#4
a176742010-05-08 09:49
顶 2 楼
1