C语言与数据结构课程设计报告要求

合集下载

c语言课程设计报告详细版

c语言课程设计报告详细版

c语言课程设计报告详细版一、课程目标知识目标:1. 掌握C语言的基本语法和结构,包括变量声明、数据类型、运算符、表达式和语句。

2. 理解并能运用控制结构,如顺序、选择和循环结构进行程序设计。

3. 学会使用数组、函数和指针进行程序开发,并能理解它们在解决复杂问题中的应用。

4. 熟悉基本的输入输出操作,文件操作以及简单的错误处理机制。

技能目标:1. 能够编写简单的C程序,解决实际问题,展现出逻辑思考和问题解决的能力。

2. 能够阅读和分析C程序代码,理解程序的结构和执行过程。

3. 能够使用调试工具检查和修正程序中的错误,提高程序的稳定性和可靠性。

4. 能够通过小组合作,完成一个综合性的项目,培养团队协作和项目管理的初步技能。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发探究计算机科学的热情,形成主动学习和终身学习的习惯。

2. 培养学生的创新思维和批判性思维,鼓励尝试不同的解决方案,勇于面对编程中的挑战。

3. 增强学生的信息意识和责任感,理解程序在现实生活中的应用和影响,认识到编程对社会发展的贡献。

4. 通过项目实践,培养学生的集体荣誉感,加强沟通能力,形成良好的团队合作精神。

课程性质分析:本课程为高年级的C语言程序设计,旨在通过项目驱动的教学方法,使学生在实践中掌握C语言的编程技能,并能够在日常生活和学习中应用。

学生特点分析:学生具备一定的逻辑思维能力,对计算机编程有一定兴趣,但个体差异较大,需要针对不同层次的学生设计不同难度和类型的教学活动。

教学要求:1. 结合实际案例进行教学,强调理论知识与实践操作的结合。

2. 注重培养学生的实际编程能力和问题解决能力,鼓励学生自主探索和协作学习。

3. 通过形成性评价和总结性评价相结合的方式,全面评估学生的学习成果。

二、教学内容1. C语言基础- 变量与数据类型- 运算符与表达式- 输入输出函数- 顺序结构程序设计2. 控制结构- 选择结构(if-else)- 循环结构(for、while、do-while)3. 函数与数组- 函数定义与调用- 数组的使用- 二维数组4. 指针与字符串- 指针的概念与使用- 指针与数组- 字符串处理函数5. 文件操作与错误处理- 文件的打开与关闭- 文件的读写操作- 简单错误处理6. 综合项目实践- 项目需求分析- 功能模块划分- 编程实现与调试- 项目展示与评价教学内容安排与进度:第一周:C语言基础第二周:控制结构第三周:函数与数组第四周:指针与字符串第五周:文件操作与错误处理第六周至第八周:综合项目实践教材章节关联:《C程序设计》第一章至第五章,涵盖课程教学内容中的所有知识点,为综合项目实践打下基础。

C语言课程设计实验报告要求

C语言课程设计实验报告要求

题名学生:***** 电子** 学号****实验地点:现代教育技术中心 ***房间实验日期和时间:2014年*月*日-*月*日实验类别:课程设计实验类型:设计性一、实验环境操作系统:windows XP编程工具:Microsoft Visual C++ 6.0二、实验目的和要求实验目的:(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。

(2)使学生进一步掌握程序设计、编写、调试能力。

(3)使学生了解软件开发的基本步骤和内容。

实验要求:实验设备信息包括:设备编号、设备种类(如:微机打印机扫描仪等等)、设备名称、设备价格、设备购入日期、是否报废、报废日期等。

试设计一实验设备信息管理系统,使之能提供以下功能:(1)能够完成对设备的录入和修改(2)对设备进行分类统计(3)设备的查询三、实验内容和结果1)总体设计和模块划分2) 详细设计数据结构定义:*********A. 主函数void main(){Node *equip;FILE *fp;int flag;Node *p,*q;printf("\t\t\t\t设备管理系统\n");printf("\n1添加记录\n");printf("\n2修改记录\n");printf("\n3显示记录\n");printf("\n4统计分类记录\n");printf("\n0*-EXIT-*\n");printf("请输入你要操作的序号:");scanf("%d",&flag);switch(flag){case 0: printf("\n>>>>>>>>>>提示:已经退出系统,ByeBye!\n");break;case 1: Add(equip); break; //增加记录case 2: Modify(equip); break;//修改记录case 3: Disp(equip); break;//显示记录信息case 4: Tongji(equip); break;//统计记录default: printf("\n>>>>>>>>>>提示:输入错误!\n"); break;}}}B. 各功能模块设计(1)输入模块Struct shebei{ char ID[10]; char name[15]; char kind[15]; char over[15]; char yesno[10]; char time[10]; char price[10];};…….(2)追加模块void Add(Node *equip) //添加记录{Node *p,*r,*s;char id[10]; //先用于输入ID,也用于判断是否跳出循环r=equip;s=equip->next; //使s为第一个有用的结点while(r->next!=NULL) //这个循环的作用是使rr=r->next; //将指针置于最末尾while(1){printf(">>>>>>>>>>提示:输入0则返回主菜单!\n");printf("\n请你输入设备ID号:");scanf("%s",id);if(strcmp(id,"0")==0) break;p=(Node *)malloc(sizeof(Node)); //申请空间strcpy(p->data.ID,id);printf("\n 请输入设备名称:"); scanf("%s",p->); printf("\n 请输入设备种类:");scanf("%s",p->data.kind);printf("\n 请输入报废日期:"); scanf("%s",&p->data.over);printf("\n 请输入设备是否报废:"); scanf("%s",&p->data.yesno); printf("\n 请输入设备购买时间:"); scanf("%s",&p->data.time); printf("\n 请输入设备价格:"); scanf("%s",&p->data.price);printf(">>>>>>>>>>提示:已经完成一条记录的添加。

c语言数据结构课程设计报告

c语言数据结构课程设计报告

课程设计说明书学号:班级: 姓名:设计题目: 学生信息管理系统设计地点:设计时间: 至成绩评定:1、工作量: A(),B(),C(),D(),F( )2、难易度:A(),B(),C(),D(),F( )3、答辩情况:A(),B(),C(),D(),F( )4、报告规范度:A(),B(),C(),D(),F( )5、学习态度:A(),B(),C(),D(),F( )总评成绩:___________________________指导教师:___________________________一、设计题目与要求1、设计目的:编写一个学生信息管理系统,实现对学生信息的基本管理。

把所学数据结构知识应用到实际软件开发中去。

设计内容:本系统应完成一下几方面的功能:(1)增加一个学生的信息(需输入要增加学生的所有信息);(2)统计本班学生总人数及男女生人数。

(3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。

(4)按学号对所有学生信息排序,并输出结果;(5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。

2、设计要求:(1)用菜单调用(2)作为一个完整的系统,应具有友好的界面和较强的容错能力(3)上机能正常运行,并写出课程设计报告二、概要设计1. 功能需求分析学生信息管理系统设计学生信息包括:学号,姓名,性别,出生年月,电话使之提供以下功能:1.系统以菜单方式工作2.插入新的学生信息3.删除某学号的学生信息4.查找某学号的学生信息5.对学生信息排序6.统计学生人数7.输出学生信息2 总体设计功能结构图设计依据程序的功能需求,描述该系统功能的结构图如下:图1 系统功能结构图模块简介依据程序的功能模块的划分,各模块定义如下:(1)增加学生信息模块名:void addstu(LinkList *&L)模块描述:通过此模块可以在学生链表中添加新的学生信息。

C语言课程设计设计报告书

C语言课程设计设计报告书

C语言课程设计设计报告书一、课程目标知识目标:1. 理解C语言的基本语法和结构,掌握变量声明、数据类型、运算符、表达式等基本概念。

2. 学会使用C语言进行顺序结构、分支结构和循环结构的编程。

3. 掌握函数的定义、声明和调用,理解局部变量和全局变量的作用域。

4. 了解数组、指针和字符串的使用,能够运用它们解决实际问题。

技能目标:1. 培养学生编写、编译和调试C程序的能力,提高编程技巧。

2. 培养学生运用C语言解决实际问题的能力,如数值计算、数据处理等。

3. 培养学生分析问题、设计算法和编写程序的能力,提高逻辑思维能力。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发学习积极性,提高自主学习能力。

2. 培养学生合作学习、分享经验的精神,提高团队协作能力。

3. 培养学生严谨、认真、负责的学习态度,养成良好编程习惯。

课程性质:本课程为高中年级C语言课程,以实践为主,注重培养学生的编程能力和逻辑思维能力。

学生特点:高中年级学生对计算机编程有一定的基础,好奇心强,学习积极性较高,但需加强实践操作和问题分析能力的培养。

教学要求:结合课程内容和学生特点,采用任务驱动、案例教学等方法,引导学生主动探究、动手实践,提高编程技能和解决问题的能力。

同时,注重培养学生良好的编程习惯和团队合作精神。

通过本课程的学习,使学生能够具备C 语言编程的基本能力,为后续计算机课程学习打下坚实基础。

二、教学内容1. C语言基础知识:变量、数据类型、常量、运算符、表达式。

教材章节:第一章2. 控制结构:顺序结构、分支结构(if语句、switch语句)、循环结构(for循环、while循环、do-while循环)。

教材章节:第二章3. 函数:函数定义、声明、调用;局部变量和全局变量;递归函数。

教材章节:第三章4. 数组:一维数组、二维数组;数组的初始化、遍历和排序。

教材章节:第四章5. 指针:指针的定义与使用;指针与数组、字符串、函数的关系。

c与数据结构课程设计

c与数据结构课程设计

c与数据结构课程设计一、教学目标本课程的教学目标是使学生掌握C语言编程基础及其在数据结构中的应用。

具体目标如下:1.知识目标:–理解C语言的基本语法、数据类型、运算符、控制结构。

–掌握函数的定义、调用和参数传递。

–了解数据结构的基本概念,包括线性表、栈、队列、树、图等。

–理解算法的基本概念,能够分析算法的时间和空间复杂度。

2.技能目标:–能够使用C语言编写简单的程序,对数据进行处理和分析。

–能够运用数据结构解决实际问题,提高程序的效率和可维护性。

–掌握算法的设计和分析方法,能够编写高效的程序。

3.情感态度价值观目标:–培养学生的编程兴趣,提高学生解决实际问题的能力。

–培养学生团队合作的精神,提高学生的沟通和协作能力。

–培养学生勇于探索、不断创新的精神,提高学生的自主学习能力。

二、教学内容本课程的教学内容主要包括C语言基础、数据结构及其在C语言中的应用。

具体安排如下:1.C语言基础:–基本语法、数据类型、运算符、控制结构。

–函数的定义、调用和参数传递。

–指针的概念和应用。

2.数据结构:–线性表的顺序存储和链式存储。

–栈和队列的定义、实现及其应用。

–树的基本概念、二叉树的遍历和应用。

–图的定义、遍历算法和应用。

3.数据结构在C语言中的应用:–排序算法及其实现。

–查找算法及其实现。

–动态规划算法及其应用。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

具体安排如下:1.讲授法:用于讲解C语言基础知识和数据结构的基本概念。

2.案例分析法:通过分析实际案例,使学生掌握数据结构在C语言中的应用。

3.实验法:让学生动手编写程序,巩固所学知识,提高实际编程能力。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。

具体安排如下:1.教材:选用《C程序设计语言》作为主教材,辅助以《数据结构与算法分析》等参考书。

2.多媒体资料:提供PPT、视频教程等资料,帮助学生更好地理解课程内容。

c语言课程设计报告要求

c语言课程设计报告要求

c语言课程设计报告要求一、课程目标知识目标:1. 理解C语言课程设计的基本要求,掌握C语言编程的基本规范。

2. 学会运用C语言编写程序,实现简单的算法和数据结构。

3. 掌握C语言中的函数定义、调用和模块化编程思想。

技能目标:1. 能够运用所学知识独立完成C语言课程设计任务,具备分析和解决问题的能力。

2. 学会使用调试工具,对程序进行调试和优化,提高代码质量。

3. 培养良好的编程习惯,提高编程效率。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发学习热情,增强自信心。

2. 培养学生的团队协作精神,提高沟通与表达能力。

3. 培养学生严谨、认真、负责的学习态度,树立正确的价值观。

课程性质:本课程为C语言编程实践课,注重培养学生的编程能力和实际操作能力。

学生特点:学生具备一定的C语言基础,对编程感兴趣,但独立完成课程设计的能力有待提高。

教学要求:结合学生特点,注重理论与实践相结合,以任务驱动教学,引导学生主动探究,培养学生的编程能力和解决问题的能力。

在教学过程中,关注学生的学习进度,及时给予指导和反馈,确保课程目标的实现。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容本课程教学内容紧密结合课程目标,选取以下重点内容进行讲解和实践:1. C语言基本语法:变量定义、数据类型、运算符、表达式、控制语句(如if、for、while等)。

2. 函数:函数定义、调用、参数传递、返回值、递归。

3. 数组与字符串:一维数组、二维数组、字符串操作。

4. 指针:指针定义、指针与数组、指针与函数、指针与动态内存分配。

5. 结构体与联合:结构体定义、结构体数组、结构体指针、联合体。

6. 文件操作:文件打开、关闭、读写、定位。

教学大纲安排如下:第一周:C语言基本语法复习,讲解课程设计要求。

第二周:函数定义与调用,实践编写简单函数。

第三周:数组与字符串操作,完成相关编程任务。

第四周:指针概念及操作,实践指针在程序中的应用。

数据结构课程设计(C语言实现)

引言概述:数据结构是计算机科学中的重要课程之一,它研究如何在计算机中存储和组织数据,以及如何高效地访问和操作这些数据。

为了提高学生对数据结构的理解和实践能力,课程设计是必不可少的一部分。

本文将详细介绍数据结构课程设计的C语言实现,包括设计目标、实现过程、关键算法和数据结构的选择。

正文内容:一、设计目标在进行数据结构课程设计时,我们首先要明确设计目标。

设计目标应该具有一定的挑战性,既能够提高学生的编程能力,又能够深入理解数据结构。

例如,可以设计一个简单的图书管理系统,其中包含图书的增加、删除、排序和查找等功能。

这样的设计目标既能够涉及到常见的数据结构,如链表和树,又能够让学生理解不同数据结构的优缺点和实现方法。

二、实现过程在实现数据结构课程设计时,我们需要一定的实践和思考。

首先,学生应该对设计目标有清楚的了解,并制定一份详细的设计方案。

设计方案应该包括算法的描述、数据结构的选择和实现的步骤。

之后,学生可以按照设计方案一步一步地进行编程实现。

在实现的过程中,学生可以利用调试工具进行调试和优化,并在遇到问题时进行合适的解决方法。

三、关键算法在数据结构课程设计中,选择合适的算法是非常关键的。

对于图书管理系统的例子,可以使用二叉搜索树实现图书的插入和查找功能,使用链表实现图书的删除功能。

此外,还可以利用递归算法实现树的遍历和排序算法实现图书的排序功能。

学生需要对这些算法进行深入的理解,并进行合适的实现和优化。

四、数据结构的选择在进行数据结构课程设计时,选择合适的数据结构非常重要。

对于图书管理系统的例子,可以选择使用链表、树和数组等数据结构。

链表可以用来实现图书的链表和排序;树可以用来实现图书的搜索和遍历;数组可以用来实现图书的统计和排序等功能。

学生需要充分理解每种数据结构的特点和适用场景,并进行合适的选择和实现。

五、小点详细阐述1. 算法复杂度分析:学生应该能够对所选择的算法进行复杂度分析,包括时间复杂度和空间复杂度。

c语言课程设计设计要求

c语言课程设计设计要求一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生编写简单程序的能力,提高学生分析问题和解决问题的能力。

1.理解C语言的基本语法和规则。

2.掌握基本数据类型、运算符和表达式。

3.熟悉控制结构,如if语句、for循环、while循环等。

4.了解函数的定义和调用。

5.能使用C语言编写简单的程序,解决问题。

6.能熟练使用C语言的调试工具,进行程序的调试和优化。

7.能阅读和理解简单的C语言程序。

情感态度价值观目标:1.培养学生对编程的兴趣,激发学生学习的主动性。

2.培养学生解决问题的能力,提高学生的自信心。

3.培养学生团队合作的精神,提高学生的沟通能力。

二、教学内容教学内容以《C语言程序设计》教材为基础,按照教材的章节安排教学内容,共分为10个章节。

1.C语言概述2.基本数据类型和运算符3.控制结构(if语句、for循环、while循环)4.数组和字符串5.结构体和文件6.预处理指令7.编程实践8.常见错误和调试技巧三、教学方法本课程采用讲授法、案例分析法、实验法等教学方法,通过多种方式激发学生的学习兴趣和主动性。

1.讲授法:通过教师的讲解,使学生掌握C语言的基本语法和概念。

2.案例分析法:通过分析典型的案例,使学生理解C语言的应用和编程思想。

3.实验法:通过上机实验,使学生掌握C语言的编程技巧和调试方法。

四、教学资源1.教材:《C语言程序设计》2.参考书:《C语言编程思想》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程环境五、教学评估本课程的评估方式包括平时表现、作业、考试等,以全面客观地反映学生的学习成果。

1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。

2.作业:布置适量的课后作业,评估学生的编程能力和对知识的理解运用。

3.考试:包括期中和期末考试,以闭卷形式进行,评估学生的综合运用能力和掌握程度。

c课程设计报告

c 课程设计报告一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构和算法,培养学生具备基本的编程能力和良好的编程习惯。

具体分解为以下三个方面的目标:1.知识目标:学生能够理解并掌握C语言的基本语法、数据结构和算法,了解程序设计的基本原理和方法。

2.技能目标:学生能够运用C语言编写简单的程序,解决实际问题,培养学生的编程能力和解决问题的能力。

3.情感态度价值观目标:学生能够体验到编程的乐趣,培养对计算机科学的兴趣,形成良好的编程习惯和团队协作意识。

二、教学内容根据教学目标,本课程的教学内容主要包括C语言的基本语法、数据结构和算法。

具体安排如下:1.C语言的基本语法:包括变量、数据类型、运算符、表达式、语句等。

2.数据结构:包括数组、链表、栈、队列、树等。

3.算法:包括排序算法、查找算法、递归算法等。

三、教学方法为了实现教学目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过教师的讲解,使学生掌握C语言的基本语法、数据结构和算法。

2.讨论法:引导学生进行小组讨论,培养学生的思考能力和团队协作能力。

3.案例分析法:通过分析典型案例,使学生能够将理论知识应用于实际问题。

4.实验法:让学生亲自动手编写程序,培养学生的编程能力和解决问题的能力。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:选择一本合适的C语言教材,作为学生学习的主要参考资料。

2.参考书:提供一些相关的参考书籍,丰富学生的知识体系。

3.多媒体资料:制作PPT、视频等多媒体资料,提高学生的学习兴趣。

4.实验设备:准备计算机实验室,让学生能够进行上机实践。

五、教学评估本课程的评估方式包括平时表现、作业、考试等多个方面,以全面、客观、公正地评价学生的学习成果。

1.平时表现:通过课堂参与、提问、讨论等方式,评估学生的学习态度和思考能力。

2.作业:布置适量的作业,让学生巩固所学知识,评估学生的编程能力和解决问题的能力。

数据结构c语言版课程设计

数据结构c语言版课程设计数据结构是计算机科学中的一个重要概念,它研究数据的组织、存储和管理方式,以及数据之间的关系和操作。

在C语言中,数据结构是通过各种不同的数据类型和数据结构来实现的。

本文将以数据结构C语言版课程设计为标题,介绍数据结构在C语言中的基本概念、常用数据结构及其实现,并结合实例进行说明。

一、引言数据结构是计算机科学的基础,它为我们处理和管理数据提供了重要的支持。

C语言作为一种高效、灵活的编程语言,广泛应用于系统开发、嵌入式程序和算法实现等领域。

掌握C语言中的数据结构是每个程序员必备的基本功。

二、基本概念1. 数据类型在C语言中,数据类型是指数据的种类和对应的操作。

常见的数据类型包括整型、浮点型、字符型等。

数据类型的选择要根据实际需求进行,以提高程序的效率和可读性。

2. 变量变量是存储数据的基本单元,通过变量名来访问其中的数据。

在C 语言中,变量必须先定义后使用,定义变量时需要指定其数据类型。

3. 数组数组是一种存储相同类型数据的集合。

在C语言中,数组的声明需要指定数组的大小,可以通过下标来访问数组中的元素。

数组的大小是固定的,一旦定义就不能改变。

4. 结构体结构体是一种自定义的数据类型,可以将不同类型的数据组合在一起。

在C语言中,结构体的定义使用关键字"struct",通过"."操作符来访问结构体成员。

三、常用数据结构1. 链表链表是一种动态数据结构,它通过指针将不同的节点连接起来。

每个节点包含数据和指向下一个节点的指针。

链表的插入和删除操作比较灵活,但查找元素的效率比较低。

2. 栈栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。

在C语言中,可以使用数组或链表来实现栈。

3. 队列队列是一种先进先出(FIFO)的数据结构,只能在队尾插入元素,在队头删除元素。

在C语言中,可以使用数组或链表来实现队列。

4. 树树是一种分层结构的数据结构,由节点和边组成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言与数据结构课程设计报告
学号 2010013314
姓名冯国伟
课程设计题目16、括号匹配问题
问题描述:假设一个算术表达式中可包含三种括号:圆括号,方括号和花括号且这三种括号可按任意次序嵌套使用。

试利用栈的运算,编写判别给定表达式中所含括号是否正确配对出现的算法。

基本要求:从键盘输入表达式,判断该表达式中各种括号是否匹配,输入判断结果。

测试数据:
(1)括号匹配的表达式:
{a+b*[c-d]}/2
(20/5+(4-3)/2)
(2)括号不匹配的表达式:
(((a+b)*c)
[{1+2)]
2011 年 12 月
目录
1 需求分析
1.1 功能与数据需求
1.1.1 题目要求的功能
1.1.2 扩展功能
1.2 界面需求
1.3 开发环境与运行需求
2 概要设计
2.1主要数据结构
2.2程序总体结构
2.3各模块函数说明
3 详细设计
3.1算法分析与设计
3.2主要程序段设计
4 测试
5 使用说明
5.1应用程序功能的详细说明
5.2应用程序运行环境要求
5.5输入数据类型、格式和内容限制
6 总结提高
6.1课程设计总结
6.2开发中遇到的问题和解决方法
6.3 对自己完成课设完成情况的评价
6.4《C语言与数据结构课程设计》课程的意见与建议
附录:程序源代码
typedef char SElemType;
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等*/
#include<limits.h> /* INT_MAX等*/
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等*/ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
#define STACK_INIT_SIZE 10 /* 存储空间初始分配量*/
#define STACK_INCREMENT 2 /* 存储空间分配增量*/
typedef struct SqStack
{
SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */
SElemType *top; /* 栈顶指针*/
int stacksize; /* 当前已分配的存储空间,以元素为单位*/
}SqStack; /* 顺序栈*/
void InitStack(SqStack *S)
{ /* 构造一个空栈S */
(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败*/
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
}
void DestroyStack(SqStack *S)
{ /* 销毁栈S,S不再存在*/
free((*S).base);
(*S).base=NULL;
(*S).top=NULL;
(*S).stacksize=0;
}
void ClearStack(SqStack *S)
{ /* 把S置为空栈*/
(*S).top=(*S).base;
}
Status StackEmpty(SqStack S)
{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
int StackLength(SqStack S)
{ /* 返回S的元素个数,即栈的长度*/
return S.top-S.base;
}
Status GetTop(SqStack S,SElemType *e)
{ /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */ if(S.top>S.base)
{
*e=*(S.top-1);
return OK;
}
else
return ERROR;
}
void Push(SqStack *S,SElemType e)
{ /* 插入元素e为新的栈顶元素*/
if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空间*/
{
(*S).base=(SElemType
*)realloc((*S).base,((*S).stacksize+STACK_INCREMENT)*sizeof(SElemType)); if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败*/
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACK_INCREMENT;
}
*((*S).top)++=e;
}
Status Pop(SqStack *S,SElemType *e)
{ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
void StackTraverse(SqStack S,void(*visit)(SElemType))
{ /* 从栈底到栈顶依次对栈中每个元素调用函数visit() */
while(S.top>S.base)
visit(*S.base++);
printf("\n");
}
void check()
{ /* 对于输入的任意一个字符串,检验括号是否配对*/
SqStack s;
SElemType ch[80],*p,e;
InitStack(&s); /* 初始化栈成功*/
printf("请输入表达式:\n");
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("左括号不正确!\n");
exit(ERROR);
}
}
else /* 栈空*/
{
printf("缺少左括号!\n");
exit(ERROR);
}
default: p++; /* 其它字符不处理,指针向后移*/ }
if(StackEmpty(s)) /* 字符串结束时栈空*/
printf("Great!\n");
else
printf("对不起,错误!\n");
}
void main()
{
check();
}。

相关文档
最新文档