`
carolaif
  • 浏览: 69891 次
  • 性别: Icon_minigender_2
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

C程序设计语言(第二版) 4-4 栈操作添加复制、打印栈顶元素,交换栈顶元素等

阅读更多
#include<stdlib.h> 
#include<stdio.h> 
#include<ctype.h> 
#include<math.h> 
 
#define MAXOP 100 
#define NUMBER  0 
#define TRUE 1 
#define FALSE 0 

int Getop(char s[]); 
void push(double val); 
double pop(void); 
void showTop(void); 
void duplicate(void); 
void swapItems(void); 
void clearStack(); 
 
int main(void) 
{ 
    int type; 
    double op2; 
    char s[MAXOP]; 
    int flag = TRUE; 
 
    while((type = Getop(s)) != EOF) 
    { 
        switch(type) 
        { 
            case NUMBER: 
                push(atof(s)); 
                break; 
            case '+': 
                push(pop() + pop()); 
				      break; 
            case '*': 
                push(pop() * pop()); 
                break; 
            case '-': 
                op2 = pop(); 
                push(pop()- op2); 
                break; 
            case '/': 
                op2 = pop(); 
                if(op2) 
                    push(pop() / op2); 
                else 
                    printf("\nError: division by zero!"); 
                break; 
            case '%': 
                op2 = pop(); 
                if(op2) 
                    push(fmod(pop(), op2)); 
                else 
                    printf("\nError: division by zero!"); 
                break; 
            case '?': 
                showTop(); 
                break; 
            case '#': 
                duplicate(); 
                break; 
            case '~': 
                swapItems(); 
                break; 
            case '!': 
                clearStack(); 
            case '\n': 
                printf("\n\t%.8g\n", pop()); 
                break; 
            default: 
                printf("\nError: unknown command %s.\n", s); 
                break; 
        } 
    } 
    return EXIT_SUCCESS; 
}    

#define MAXVAL 100 
 
int sp = 0;          /* Next free stack position. */ 
double val[MAXVAL];  /* value stack. */ 
 
/* push: push f onto stack. */ 
void push(double f) 
{ 
    if(sp < MAXVAL) 
        val[sp++] = f; 
    else 
         printf("\nError: stack full can't push %g\n", f); 
} 
 
/*pop: pop and return top value from stack.*/ 
double pop(void) 
{ 
    if(sp > 0) 
        return val[--sp]; 
    else 
    { 
        printf("\nError: stack empty\n"); 
        return 0.0; 
    } 
} 
 
void showTop(void) //?
{ 
	double top=val[sp];
	
	printf("%u\n",top);
} 
 
 
void duplicate(void) //#
{ 
	int top=sp-1;
	double topVal;
	topVal=val[top];
	val[top+1]=topVal;
	sp++;
} 

void swapItems(void) //~
{ 
	double temp;
	int top= sp;
	int secTop = sp-1;
	temp = val[top];
	val[top]=val[secTop];
	val[secTop]=temp;


} 
 
/* pop only returns a value if sp is greater than zero. So setting the 
stack pointer to zero will cause pop to return its error */ 
 
void clearStack(void) //!
{ 
	sp=0;
} 
 
int getch(void); 
void unGetch(int); 
 
/* Getop: get next operator or numeric operand. */ 
int Getop(char s[]) 
{ 
    int i = 0; 
    int c; 
    int next; 
 
    /* Skip whitespace */ 
    while((s[0] = c = getch()) == ' ' || c == '\t') 
        ; 
    s[1] = '\0'; 
 
    /* Not a number but may contain a unary minus. */ 
    if(!isdigit(c) && c != '.' && c != '-') 
        return c;                
 
    if(c == '-') 
    { 
        next = getch(); 
        if(!isdigit(next) && next != '.') 
        { 
           return c; 
        } 
        c = next; 
    } 
	   else 
        c = getch(); 
  
    while(isdigit(s[++i] = c)) 
		c = getch(); 
    if(c == '.')                        /* Collect fraction part. */ 
        while(isdigit(s[++i] = c = getch())) 
                        ; 
    s[i] = '\0'; 
    if(c != EOF) 
        unGetch(c); 
    return NUMBER; 
} 
 
#define BUFSIZE 100 
 
char buf[BUFSIZE]; 
int bufp = 0; 
 
/* Getch: get a ( possibly pushed back) character. */ 
int getch(void) 
{ 
     return (bufp > 0) ? buf[--bufp]: getchar(); 
} 
 
/* unGetch: push character back on input. */ 
void unGetch(int c) 
{ 
    if(bufp >= BUFSIZE) 
        printf("\nUnGetch: too many characters\n"); 
    else 
        buf[bufp++] = c; 
}  

 

分享到:
评论

相关推荐

    顺序栈,压栈、弹栈、获得栈顶元素、统计栈中元素个数、打印栈中元素

    顺序栈,利用一组地址连续的存数单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置,压栈、弹栈、获得栈顶元素、统计栈中元素个数、打印栈中元素

    c++栈操作实现,堆栈,出栈,取栈顶元素

    用c++写的对栈的小程序,实现了堆栈,出栈,取栈顶元素的操作

    用类来实现简单的栈。栈中有以下操作:元素入栈,读出栈顶元素值,退栈,判断栈顶空否,如果溢出,程序终止。

    栈中有以下操作:元素入栈,读出栈顶元素值,退栈,判断栈顶空否,如果溢出,程序终止。

    顺序栈的各种基本操作

    编写一个程序,实现顺序栈的各种基本运算,并在基础上完成以下功能: 1)初始化顺序栈; 2)判断顺序栈是否为空; 3)依次进栈元素a,b,c,d,e; 4)判断顺序栈是否为空; 5)输出栈长度; 6)输出从栈顶到栈底的元素; 7)...

    C语言 栈的实现

    printf("*******************************... printf("* 7---------返回栈顶元素 *\n"); printf("* 8---------清空栈 *\n"); printf("* 9---------退出 *\n"); printf("**************************************\n");

    实验2--栈实验报告.doc

    实验二 栈 一、实验目的 1、掌握栈的结构特性及其入栈,出栈操作; 2、对栈相应算法的时间复杂度进行分析; 3、理解栈数据结构的特点(优缺点); 4、掌握栈的概念。 二、实验环境 windowsXP microsoft visual ...

    栈的基本操作,实现入栈,出栈,取栈顶的值等操作过程

    栈的基本操作,实现入栈,出栈,取栈顶的值等操作过程111111111111111

    C语言实现栈的操作

    C语言实现栈的基本操作: 1.初始化栈 2.清空栈 3.判断栈是否清空 4.压栈 5.出栈 6.得到栈长度 7.返回栈顶数据 8.遍历栈

    栈与队列的基本操作

    2. 掌握栈的初始化、进栈、退栈、取栈顶、判栈空等基本操作。 3. 运用栈的基本操作解决一些简单的实际问题。 4. 掌握队列的先进先出的特点。 5. 掌握队列的初始化、入队、出队、取队首元素、判队空等基本操作

    栈的顺序存储结构C实现

    使用顺序线性表实现,含有如下功能: 1.创建栈; 2.销毁栈; 3.清空栈; 4.进栈; 5.出栈; 6.获取栈顶元素; 7.获取栈的大小。

    shuju2.cpp

    编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。

    顺序栈相关算法

    4)存取操作:读取栈顶元素,将数据输出在屏幕上;。 3、 为了增强程序的可读性,程序中要有适当的注释。 4、 由教师随机给出栈操作指令序列,完成程序验证。例如:(压栈 a,压栈 b,压栈 c,压栈 d,弹栈,弹 栈...

    2011年3月计算机二级c真题(附答案)

    ) 一、 选择题 (1)下列关于栈叙述正确的是 A)栈顶元素最先能被删除 B)栈顶元素最后才能被删除 ... C)栈底元素永远不能被删除 D)以上三种说法都不对 。。。。。。。。。。。 答案在最后一页

    c语言 完成链栈的设计

    完成栈的建立、入栈、出栈、取栈顶元素、判断栈是否为空、计算栈中数据元素的个数、打印栈中的元素、将栈清空、销毁等函数的功能

    数据结构实验课之单链表类实现和顺序栈实现

    4) 存取操作:读取栈顶元素,将数据输出在屏幕上;。 3、 为了增强程序的可读性,程序中要有适当的注释。 4、 由教师随机给出栈操作指令序列,完成程序验证。例如:(压栈 a,压栈 b,压栈 c,压栈 d,弹栈,弹 栈...

    C语言数据结构之栈简单操作

    C语言数据结构之栈简单操作 实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 ...

    数据结构:关于栈的一些用法、代码.txt

    数据结构:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。...从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

    栈类模板的设计与实现

    进行栈类模板的设计并实现,栈采用链式存储结构,数据元素可以是char,int,float 等多种数据类型,包括以下功能: 实现初始化栈操作,建立一个空栈; (1)实现清空栈操作; (2)实现判断栈是否为空的操作; (3)实现求栈长度...

    链式栈的基本操作

    一个链式栈的类,实现了栈的基本操作,入栈,出栈,清空,复制(拷贝构造函数)

    数据结构之栈和队列的代码实现(C语言)

    这个资源主要是使用C语言实现的栈和队列两种数据结构基本操作,包含栈的入栈、出栈,队列的入队列、出队列的相关操作,具体包含如下几个: 1、顺序栈:入栈、出栈、获取栈顶元素、打印栈。 2、链栈:入栈、出栈、...

Global site tag (gtag.js) - Google Analytics