终于把栈搞定了,还是自己太懒。
主要的算法是1)数的的进制转换2)括号匹配3)行编辑
迷宫那个还是先放一下吧。。。。
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define STACK_INCREASE 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
} Sstack;
void Init(Sstack *S)
{
S->base=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));
if(!S->base)
exit(0);
S->top=S->base;
S->stacksize=MAXSIZE;
}
ElemType Gettop(Sstack S)
{
if(S.base==S.top)
printf("No Element!\n");
else
return(*(--S.top));
}
void push(Sstack *S,ElemType x)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(ElemType *)realloc(S->base,(S->stacksize+STACK_INCREASE)*sizeof(ElemType));
if(!S->base)
exit(0);
else
S->stacksize+=STACK_INCREASE;
}
*(S->top)=x;
S->top++;
}
ElemType pop(Sstack *S)
{
ElemType c;
if(S->top==S->base)
exit(0);
else
{
c=Gettop(*S);
S->top--;
return c;
}
}
void ClearStack(Sstack *S)
{
while(!StackEmpty(*S))
{
pop(S);
}
}
void show(Sstack S)
{
while(S.top!=S.base)
{
printf("%5c",*(S.base));
S.base++;
}
printf("\n");
}
//实例,十进制输入,八进制输出
//N=(N div d)*d+N mod d
void conversion()
{
int i;
Sstack S;
Init(&S);
printf("Please input a decimal numbel:\n");
scanf("%d",&i);
while(i)
{
push(&S,i%8);
i=i/8;
}
while(S.top!=S.base)
{
printf("%d",Gettop(S));
S.top--;
}
printf("\n");
}
int StackEmpty(Sstack S)
{
if(S.top==S.base) return 1;
else return 0;
}
//括号匹配,遇左括号进栈,遇有括号出栈,开始与最后都为空栈
int match(char *exp)
{
Sstack S;
Init(&S);
int i=0,j=1,b=1;
printf("exp:%c\n",exp[3]);
char c=NULL;
while(exp[i]!='\0'&&b==1)
{
//printf("exp[i]:%c\n",exp[i]);
if(exp[i]=='(') push(&S,exp[i]);
if(exp[i]==')')
{
c=pop(&S);
if(c!='(') b=0;
}
i++;
}
return(b&&StackEmpty(S));
}
void LineEdit()
{
Sstack S;
Init(&S);
char ch=getchar();
while(ch!=EOF)
{
while(ch!=EOF&&ch!='\n')
{
switch(ch)
{
case '#':pop(&S); break;
case '@':ClearStack(&S); break;
default:push(&S,ch); break;
}
ch=getchar();
}
show(S);
//do some action to transmit the data
ClearStack(&S);
if(ch!=EOF) ch=getchar();
}
//DestroyStack();
}
main()
{
LineEdit();
char *ex="(())";
printf("ex:%c\n",ex[3]);
printf("Is Matched?%d",match(ex));
Sstack S;
Init(&S);
printf("Is empty?%d",StackEmpty(S));
printf("Push three!\n");
push(&S,'a');
push(&S,'s');
push(&S,'w');
show(S);
printf("Pop one!\n");
pop(&S);
show(S);
printf("十进制输入,八进制输出\n");
conversion();
Gettop(S);
printf("Hello!\n");
}
分享到:
相关推荐
在准备2009年考研计算机学科专业基础综合考试时,考生应深入理解栈和队列的基本概念、操作以及它们在实际问题中的应用。通过练习编程题,设计和实现自己的栈和队列,可以巩固理解,并提高解决问题的能力。同时,掌握...
这份“杭州电子科技大学-计算机-考研-初试-复试-复习知识点总结.zip”压缩包文件,包含了历年的考研复习重点,旨在帮助考生们精准把握考试脉络,提升备考效率。 一、核心课程与基础理论 1. 数据结构:作为计算机...
### 数据结构考研复习精编知识点概述 #### 一、线性表 **1.1 线性表的定义和基本操作** - **定义**:线性表是一种基本且重要的数据结构,它由一系列元素组成,这些元素按照一定的顺序排列,并且每个元素除了第一...
数据结构与操作系统是计算机科学中的两个核心领域,对于考研备考来说,这两个主题的理解和掌握至关重要。苏州大学2006年的计算机考研试题聚焦于这些关键知识点,旨在考察考生的基础理论知识以及问题解决能力。 首先...
数据结构笔记-考研复习 数据结构是计算机科学中的一门重要学科,研究如何组织、存储和使用数据。下面是考研复习笔记中的一些重要知识点: 1. 数据结构定义:数据结构是指数据元素之间的逻辑关系、数据的运算和存储...
4. 操作系统: - 进程管理:理解进程的概念,学习进程的创建、同步、通信和调度策略。 - 内存管理:掌握虚拟内存、分页、分段的原理,了解页面替换算法。 - 文件系统:理解文件的组织结构,学习文件的I/O操作和...
2015年计算机专业考研大纲主要涵盖了四个核心领域:数据结构、计算机组成原理、操作系统和计算机网络。这些领域是计算机科学的基础,对于研究生入学考试至关重要。 在数据结构部分,大纲强调了理解基本概念,包括...
这份"计算机考研数据结构复习指导Word版"提供了一条有效的学习路径,帮助考生们精准定位并攻克这个领域的关键点。 复习指导文档《复习指导(数据结构部分).doc》可能涵盖了以下内容: 1. **基本概念**:数据结构...
数据结构是计算机科学中的核心课程,对于考研复习至关重要。它主要研究如何在计算机中组织和管理数据,以便高效地进行存储、检索和处理。在这个课件中,我们将重点关注两种基本的数据结构:栈和队列。 栈(Stack)...
2018数据结构考研复习指导旨在帮助备考者系统、高效地复习这一关键领域,以便在考试中取得理想的成绩。 数据结构是研究数据的逻辑表示和物理存储,以及如何在这些数据上进行有效操作的一门学科。它不仅涵盖了基本的...
本复习资料旨在帮助考生全面理解和掌握数据结构的基础理论、基本概念和算法实现,为考试做好充分准备。 一、线性数据结构 线性数据结构包括数组、链表、栈和队列等。数组是一种静态存储结构,通过索引访问元素,...
其主要包括数组、链表、栈、队列、树、图等基本概念,以及这些数据结构上的操作算法,如排序和查找。在C语言环境下学习数据结构,可以更好地理解底层原理,因为C语言接近机器,能直接操作内存。 1. **数组**:是最...
本复习指导聚焦于2022年的考研选择题,涵盖了数据结构的基础概念和算法评估等相关知识。 1. 数据结构的基本概念: - 抽象数据类型(ADT)是定义数据结构的关键,它包括数据元素、数据对象和数据关系。选项D正确,...
在南邮的考研复习中,主要会涵盖以下几个关键知识点: 1. **线性结构**:如数组、链表、队列和栈。数组是最基本的数据结构,提供固定大小的存储空间;链表允许动态插入和删除,但访问速度较慢;队列是一种先进先出...
综上所述,这份资源包提供了全面的哈工大计算机考研准备材料,考生应重点复习数据结构、计算机组成、操作系统、网络和编程语言,并通过"计算机系统导论"深化理论理解,利用"README.md"指导学习路径,通过".vs"文件...
4. 计算机网络:网络部分主要涉及TCP/IP协议栈,包括OSI模型、TCP与UDP的区别、IP地址分类、子网掩码、DNS解析、HTTP协议、TCP连接建立与关闭(三次握手、四次挥手)等。 5. 其他:除了上述四大核心领域,试题可能...