首页 > 其他 > 详细

数据结构回顾

时间:2014-03-05 16:58:21      阅读:527      评论:0      收藏:0      [点我收藏+]

栈结果

bubuko.com,布布扣
bubuko.com,布布扣
#include "stdio.h"    
#include "stdlib.h"   
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status; 
typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */

/* 顺序栈结构 */
typedef struct
{
    //下标为0的地方为栈底,top指针指向栈顶部
    SElemType data[MAXSIZE];
    int top;
}SqStack;

Status visit(SElemType c)
{
    printf("%d ",c);
    return OK;
}

/*  构造一个空栈S */
Status InitStack(SqStack *s)
{ 
    s->top=-1;
    return OK;
}

/* 把S置为空栈 */
Status ClearStack(SqStack *s)
{ 
    s->top=-1;
    return OK;
}

/* 若栈S为空栈,则返回TRUE,否则返回FALSE */
Status StackEmpty(SqStack s)
{ 
    if(s.top==-1){
        return TRUE;
    }else{
        return FALSE;
    }
}
/* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */
Status GetTop(SqStack s,SElemType *e)
{
    if(s.top<0){
    return ERROR;
    }
    if(s.top>=MAXSIZE-1){
    return ERROR;
    }
    *e=s.data[s.top];
    return OK;
}

/* 插入元素e为新的栈顶元素 */
Status Push(SqStack *s,SElemType e)
{
    if(s->top>=MAXSIZE-1){
        return ERROR;
    }
    else{
    s->data[++s->top]=e;
    }
    return OK;
}

/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
Status Pop(SqStack *s,SElemType *e)
{ 
    if(s->top<=0){
    return ERROR;
    }

    *e=s->data[s->top];
    s->top--;
    return OK;
    return OK;
}

/* 从栈底到栈顶依次对栈中每个元素显示 */
Status StackTraverse(SqStack s)
{
    if(s.top<=0){
    return ERROR;
    }
    int i;
    for(i=0;i<=s.top;i++){
    visit(s.data[i]);
    }
    printf("\n");
    return OK;
}
int StackLength(SqStack s){
return ++s.top;
}
int main()
{
        int j;
        SqStack s;
        int e;
        if(InitStack(&s)==OK)
                for(j=1;j<=10;j++)
                        Push(&s,j);
        printf("栈中元素依次为:");
        StackTraverse(s);
        Pop(&s,&e);
        printf("弹出的栈顶元素 e=%d\n",e);
        printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s));
        GetTop(s,&e);
        printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s));
        ClearStack(&s);
        printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s));
        
        return 0;
}
顺序栈的实现
bubuko.com,布布扣

一点总结:

1)下标为0的数组元素为栈底

2)top指针时刻指向栈顶元素

3)初始化的时候,top指针为-1

数据结构回顾,布布扣,bubuko.com

数据结构回顾

原文:http://www.cnblogs.com/bobodeboke/p/3581231.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!