| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 842 人关注过本帖
标题:求解栈的出栈入栈
只看楼主 加入收藏
s956133092ms
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-14
结帖率:100%
收藏
 问题点数:0 回复次数:3 
求解栈的出栈入栈
#include<stdio.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define OVERFLOW -2
typedef struct{
   char *base;
   char *top;
   int stacksize;
}SqStack;
typedef struct QNode{
    char data;
    struct QNode *next;
}QNode,*Queueptr;
typedef struct{
    Queueptr front;
    Queueptr rear;
}LinkQueue;
void InitStack(SqStack S){//建立栈
    S.base=(char *)malloc(STACK_INIT_SIZE * sizeof(char));
    if(!S.base) exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}
void Push(SqStack S,char e){//压入栈
    if(S.top-S.base >= S.stacksize){
        S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
        if(!S.base) exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++ =e;
}
void Pop(SqStack S,char e){//弹出栈顶,并得到栈顶值
    //if(S.top==S.base) return OVERFLOW;
    e=*--S.top;
}
void InitQueue(LinkQueue Q){//建立队列
    Q.front = Q.rear = (Queueptr)malloc(sizeof(QNode));
    if(!Q.front) exit(OVERFLOW);
    Q.front->next=NULL;
}
void EnQueue(LinkQueue Q,char e){//输入队尾
    Queueptr p;
    p=(Queueptr)malloc(sizeof(QNode));
    if(!p) exit(OVERFLOW);
    p->data=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}
void DeQueue(LinkQueue Q,char e){//删除队头,并获得队头值
    Queueptr p;
    //if(Q.front == Q.rear) return(-1);
    p=Q.front->next;
    e=p->data;
    Q.front->next=p->next;
    if(Q.rear==p) Q.rear=Q.front;
    free(p);
}
int main(){
    SqStack S;
    InitStack(S);
    LinkQueue Q;
    InitQueue(Q);
    char secret[101],note,x;
    scanf("%s",secret);
    int i=0,j;
    while(secret[i]!='\0'){
        i++;//求出数组的长度
    }
    for(j=i-1;j>=0;j--){
            x=secret[j];
            printf("%c ",x);
            Push(S,x);
    }
    printf("%d ",j);
    while(S.top!=S.base){
        Pop(S,x);
        printf("%c ",x);
    }
    return 0;
}
队暂时还没用到,问题出在栈,for循环只循环了一次,而且好像push和pop有问题,无法入栈,程序运行的时候会停止运行,求大神看看
搜索更多相关主题的帖子: include 
2016-10-28 18:28
s956133092ms
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-14
收藏
得分:0 
#include<stdio.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define OVERFLOW -2
typedef struct{
   char *base;
   char *top;
   int stacksize;
}SqStack;
typedef struct QNode{
    char data;
    struct QNode *next;
}QNode,*Queueptr;
typedef struct{
    Queueptr front;
    Queueptr rear;
}LinkQueue;
void InitStack(SqStack &S){//建立栈
    S.base=(char *)malloc(STACK_INIT_SIZE * sizeof(char));
    if(!S.base) exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}
void Push(SqStack &S,char e){//压入栈
    if(S.top-S.base >= S.stacksize){
        S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
        if(!S.base) exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++ =e;
}
void Pop(SqStack &S,char e){//弹出栈顶,并得到栈顶值
    //if(S.top==S.base) return OVERFLOW;
    e=*--S.top;
}
void InitQueue(LinkQueue &Q){//建立队列
    Q.front = Q.rear = (Queueptr)malloc(sizeof(QNode));
    if(!Q.front) exit(OVERFLOW);
    Q.front->next=NULL;
}
void EnQueue(LinkQueue &Q,char e){//输入队尾
    Queueptr p;
    p=(Queueptr)malloc(sizeof(QNode));
    if(!p) exit(OVERFLOW);
    p->data=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}
void DeQueue(LinkQueue &Q,char &e){//删除队头,并获得队头值
    Queueptr p;
    //if(Q.front == Q.rear) return(-1);
    p=Q.front->next;
    e=p->data;
    Q.front->next=p->next;
    if(Q.rear==p) Q.rear=Q.front;
    free(p);
}
int main(){
    SqStack S;
    InitStack(S);
    LinkQueue Q;
    InitQueue(Q);
    char secret[101],note,x;
    scanf("%s",secret);
    int i=0,j;
    while(secret[i]!='\0'){
        i++;//求出数组的长度
    }
    for(j=i-1;j>=0;j--){
            x=secret[j];
            printf("%c ",x);
            Push(S,x);
    }
    while(S.top!=S.base){
        Pop(S,x);
        printf("%s ",x);
    }
    return 0;
}
改了下用了引用,但是还是会停止运行,无法输出
2016-10-28 18:31
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
删除

[此贴子已经被作者于2016-10-28 19:01编辑过]


早知做人那么辛苦!  当初不应该下凡
2016-10-28 18:48
s956133092ms
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-14
收藏
得分:0 
回复 3楼 炎天
???啥
2016-10-28 22:28
快速回复:求解栈的出栈入栈
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021905 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved