zoukankan      html  css  js  c++  java
  • 栈的应用举例1

    // algo3-1.cpp 调用算法3.1的程序
    #define N 8 // 定义待转换的进制N(二进制~九进制)
    typedef int SElemType; // 定义栈元素类型为整型
    #include"c1.h"
    #include"c3-1.h" // 采用顺序栈
    #include"bo3-1.cpp" // 利用顺序栈的基本操作
    void conversion() // 算法3.1
    { // 对于输入的任意一个非负十进制整数,打印输出与其等值的N进制数
    	SqStack s;
    	unsigned n; // 非负整数
    	SElemType e;
    	InitStack(s); // 初始化栈
    	printf("将十进制整数n转换为%d进制数,请输入:n(>=0)=",N);
    	scanf("%u",&n); // 输入非负十进制整数n
    	while(n) // 当n不等于0
    	{
    		Push(s,n%N); // 入栈n除以N的余数(N进制的低位)
    		n=n/N;
    	}
    	while(!StackEmpty(s)) // 当栈不空
    	{
    		Pop(s,e); // 弹出栈顶元素且赋值给e
    		printf("%d",e); // 输出e
    	}
    	printf("
    ");
    }
    void main()
    {
    	conversion();
    }

    如果将N 定义为2,algo3-1.cpp 就是将十进制数转换为二进制数的程序。

    // algo3-2.cpp 改算法3.1,十进制→十六进制
    typedef int SElemType; // 定义栈元素类型为整型
    #include"c1.h"
    #include"c3-1.h" // 采用顺序栈
    #include"bo3-1.cpp" // 利用顺序栈的基本操作
    void conversion()
    { // 对于输入的任意一个非负十进制整数,打印输出与其等值的十六进制数
    	SqStack s;
    	unsigned n; // 非负整数
    	SElemType e;
    	InitStack(s); // 初始化栈
    	printf("将十进制整数n转换为十六进制数,请输入:n(>=0)=");
    	scanf("%u",&n); // 输入非负十进制整数n
    	while(n) // 当n不等于0
    	{
    		Push(s,n%16); // 入栈n除以16的余数(十六进制的低位)
    		n=n/16;
    	}
    	while(!StackEmpty(s)) // 当栈不空
    	{
    		Pop(s,e); // 弹出栈顶元素且赋值给e
    		if(e<=9)
    			printf("%d",e);
    		else
    			printf("%c",e+55); // 大于9的余数,输出相应的字符
    	}
    	printf("
    ");
    }
    void main()
    {
    	conversion();
    }


    // algo3-3.cpp 括号(()、[]和{})匹配的检验
    typedef char SElemType;
    #include"c1.h"
    #include"c3-1.h"
    #include"bo3-1.cpp"
    void check()
    { // 对于输入的任意一个字符串,检验括号是否配对
    	SqStack s;
    	SElemType ch[80],*p,e;
    	InitStack(s); // 初始化栈成功
    	printf("请输入带括号(()、[]和{})的表达式
    ");
    	gets(ch);
    	p=ch; // p指向字符串的首字符
    	while(*p) // 没到串尾
    		switch(*p)
    	{
    case '(':
    case '[':
    case '{':Push(s,*p++); // 左括号入栈,且p++
    	break;
    case ')':
    case ']':
    case '}':if(!StackEmpty(s)) // 栈不空
    		 {
    			 Pop(s,e); // 弹出栈顶元素
    			 if(!(e=='('&&*p==')'||e=='['&&*p==']'||e=='{'&&*p=='}'))
    			 { // 出现3种匹配情况之外的情况
    				 printf("左右括号不配对
    ");
    				 exit(ERROR);
    			 }
    		 }
    	else // 栈空
    	{
    		printf("缺乏左括号
    ");
    		exit(ERROR);
    	}
    default: p++; // 其它字符不处理,指针向后移
    	}
    	if(StackEmpty(s)) // 字符串结束时栈空
    		printf("括号匹配
    ");
    	else
    		printf("缺乏右括号
    ");
    }
    void main()
    {
    	check();
    }
    // algo3-4.cpp 行编辑程序,实现算法3.2
    typedef char SElemType;
    #include"c1.h"
    #include"c3-1.h"
    #include"bo3-1.cpp"
    FILE *fp;
    void copy(SElemType c)
    { // 将字符c送至fp所指的文件中
    	fputc(c,fp);
    }
    void LineEdit()
    { // 利用字符栈s,从终端接收一行并送至调用过程的数据区。算法3.2
    	SqStack s;
    	char ch;
    	InitStack(s);
    	printf("请输入一个文本文件,^Z结束输入:
    ");
    	ch=getchar();
    	while(ch!=EOF)
    	{ // 当全文没结束(EOF为^Z键,全文结束符)
    		while(ch!=EOF&&ch!='
    ')
    		{ // 当全文没结束且没到行末(不是换行符)
    			switch(ch)
    			{
    			case '#':if(!StackEmpty(s))
    						 Pop(s,ch); // 仅当栈非空时退栈,c可由ch替代
    				break;
    			case '@':ClearStack(s); // 重置s为空栈
    				break;
    			default :Push(s,ch); // 其它字符进栈
    			}
    			ch=getchar(); // 从终端接收下一个字符
    		}
    		StackTraverse(s,copy); // 将从栈底到栈顶的栈内字符传送至文件
    		fputc('
    ',fp); // 向文件输入一个换行符
    		ClearStack(s); // 重置s为空栈
    		if(ch!=EOF)
    			ch=getchar();
    	}
    	DestroyStack(s);
    }
    void main()
    {
    	fp=fopen("ed.txt","w"); // 在当前目录下建立ed.txt文件,用于写数据,
    	if(fp) // 如已有同名文件则先删除原文件
    	{
    		LineEdit();
    		fclose(fp); // 关闭fp所指的文件
    	}
    	else
    		printf("建立文件失败!
    ");
    }



  • 相关阅读:
    设计模式的分类
    SQL Server 2005 TSQL 学习笔记:排名函数
    JS正则表达式语法
    魅族 “拜产品教”公司的优秀与局限
    jqueryMobile初始化组件
    Loading Scripts Without Blocking
    LabJs学习笔记:分析图
    翻转的css3样式
    IE(IE6/IE7/IE8)支持HTML5标签
    我的空间轨迹!
  • 原文地址:https://www.cnblogs.com/KongkOngL/p/3945966.html
Copyright © 2011-2022 走看看