| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2172 人关注过本帖
标题:学习日记一:顺序栈的操作集
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
 问题点数:0 回复次数:2 
学习日记一:顺序栈的操作集
一开始写错,调用IsEmpty,IsFull函数竟然没写实参
建立栈时竟然忘记建立空间保存栈这种结构

程序代码:
#include <stdio.h>
#define MaxSize 100

struct StackNode
{
    int data[MaxSize];
    int top;
};

typedef struct StackNode *PtrStackNode;


PtrStackNode create( int N )
{
    void PushStack( stack );//要函数声明,否则将PushStack看成int返回值类型,造成类型不匹配

    PtrStackNode stack;
    int i;
    
    stack->top=-1;

    for( i=0 ; i<N ; i++ )
    {        
        PushStack( stack );
    }

    return stack;
}

int IsEmpty( PtrStackNode stack )
{
    if( stack->top==-1 )
        return 1;
    else
        return 0;
}

int IsFull( PtrStackNode stack )
{
    if( stack->top == MaxSize-1 )
        return 1;
    else
        return 0;
}

void PushStack( PtrStackNode stack )
{
    int item;
    
    if( !IsFull )    
    {    
        scanf("%d",&item);
    
        stack->top++;
        stack->data[stack->top] = item ;
        return;
    }
    else
    {
        printf("栈已满\n");
        return;
    }
}


void PopStack( PtrStackNode stack )
{
    if(IsEmpty) printf("栈已空,无法出栈\n");   //有返回值的函数无返回
    else
        printf ( "已删除%d\n" , stack->data[stack->top--] ) ;   //如果是stack->top减2,可以将其赋值给一个变量,减2后再返回     
}


void OutPutStack(PtrStackNode stack)
{
    int k;
    k=stack->top;
    while(k>-1)
    {
        printf( "%d\n" , stack->data[k] );
        k--;
    }
    printf("已输出完毕\n") ;
    return;

}


int main()
{
    
    int N;
    PtrStackNode stack;

    printf("请输入栈中元素个数:");
    scanf("%d",&N);
    printf("\n");

    stack = create( N ) ; //建栈N个元素,返回栈结点指针

    OutPutStack(stack);

    PopStack(stack);

    OutPutStack(stack);

    PushStack(stack);
    
}

修改之后
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100

struct StackNode
{
    int data[MaxSize];
    int top;
};
typedef struct StackNode *PtrStackNode;
void PushStack( PtrStackNode stack );

PtrStackNode create( int N )
{
    void PushStack( PtrStackNode stack );//要函数声明,否则将PushStack看成int返回值类型,造成类型不匹配

    PtrStackNode stack = (PtrStackNode) malloc( sizeof (struct StackNode) ) ;//建立栈时需要开辟一个空间让指针指向它,在空间内有元素data数组    
    int i; 
    
    stack->top=-1;

    for( i=0 ; i<N ; i++ )
    {        
        PushStack( stack );
    }

    return stack;
}


int IsEmpty( PtrStackNode stack )
{
    if( stack->top==-1 )
        return 1;
    else
        return 0;
}


int IsFull( PtrStackNode stack )
{
    if( stack->top == MaxSize-1 )
        return 1;
    else
        return 0;
}


void PushStack( PtrStackNode stack )
{
    int item;
    
    if( !IsFull(stack) )    
    {    
        scanf("%d",&item);
    
        stack->top++;
        stack->data[stack->top] = item ;
        return;
    }
    else
    {
        printf("栈已满\n");
        return;
    }
}


void PopStack( PtrStackNode stack )
{
    if(IsEmpty(stack)) printf("栈已空,无法出栈\n");   //有返回值的函数无返回
    else
        printf ( "已删除%d\n" , stack->data[stack->top--] ) ;   //如果是stack->top减2,可以将其赋值给一个变量,减2后再返回     
}


void PrintfPutStack(PtrStackNode stack)
{
    int k;
    k=stack->top;
    while(k>-1)
    {
        printf( "%d\n" , stack->data[k] );
        k--;
    }
    printf("已输出完毕\n") ;
    return;

}


int main()
{
    
    int N;
    PtrStackNode stack;

    printf("请输入栈中元素个数:");
    scanf("%d",&N);
    printf("\n");

    stack = create( N ) ; //建栈N个元素,返回栈结点指针

    PrintfPutStack(stack);

    PopStack(stack);

    PrintfPutStack(stack);

    PushStack(stack);
    
}

搜索更多相关主题的帖子: 日记 color create 空间 
2015-10-29 10:01
特仑苏
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-4-15
收藏
得分:0 
加油加油,学生狗我真是对这些代码醉了

小小的天有大大的梦想
2015-11-16 22:47
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 特仑苏
都是学生狗啦。。
2015-11-22 14:54
快速回复:学习日记一:顺序栈的操作集
数据加载中...
 
   



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

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