天津理工大学c语言上机报告8_第1页
天津理工大学c语言上机报告8_第2页
天津理工大学c语言上机报告8_第3页
天津理工大学c语言上机报告8_第4页
天津理工大学c语言上机报告8_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、天津理工大学计算机与通信工程学院实验报告(试做)2009 至 2010学年第学期课程名称咼级程序设计语言I学号学生姓名年级专业教学班号实验地点实验时间20年月日第节至第节主讲教师孙世温辅导教师实验(八) 软件环境实验名称结构体和联合Win XP、Visual C+ 6.0硬件环境PC实验目的(1)(2)(3)(4)(5)掌握结构体类型的定义和使用; 掌握结构体类型变量的概念和使用; 掌握链表的概念,初步学会对链表进行操作; 掌握共用体的概念和使用;进一步熟悉Visual C+6.0开发环境下调试程序的基本步骤。实验内容(应包括实验题目、实验要求、实验任务等)(1) 利用顺序表实现“先进后出”的

2、堆栈 结构体定义:/结构体Stackstruct Stackint * List; /用来存储元素的顺序表int curNumber; /用来存储当前元素的总个数 ;函数原型:/初始化堆栈清空堆栈将元素obj压入堆栈的栈顶void in iStack(Stack * A);void clearStack(Stack * A);void push(Stack * A, ELEMENT obj);将当前栈顶的元素弹出栈。要求:栈不为空返回当前栈顶的元素值。要求:栈不为空判断当前堆栈是否为空,空返回1,非空返回0自顶向下显示堆栈中的元素void pop( Stack * A);ELEMENT get

3、_t op( Stack * A);int is_emp ty(Stack * A);void dis play(Stack * A);(长整型)、姓名(字符数组)、性别(字符型)、年龄(整型)组(2) 已知学生基本信息由学号成。定义如下结构类型: 结构体定义:/定义结构体:存储学生基本信息struct STUDENT_NODE long int id;char nameMAX_LEN; char sex;int age;/指针指向下一个结点,用以形成链表STUDENT_NODE *n ext;/定义结构体:存储单向链表struct STUDENT_LINK STUDENT_NODE *top

4、;函数原型:初始化学生链表清空学生链表判断该学号的学生信息是否存在添加一个新同void in iStude ntLi nk(STUDENT_LINK * L); /void clearStude ntLi nk(STUDENT_LINK * L); /int isExist(STUDENT_LINK * L, lo ng int id); /int Add(STUDENT_LINK * L,lo ng int id,char name,char sex, i nt age); / 学的信息/根据学int Modify(STUDENT_LINK * L, lo ng int id,char na

5、me,char sex, i nt age); 号,修改该同学的信息根据学号,从链表中删除该同学的信息/根据学号,输出显示该同学信息/从头到尾,输出当前所有的同学int Delete(STUDENT_LINK * L, lo ng in t id); /int Search(STUDENT_LINK * L,lo ng in t id); void ShowALL(STUDENT_LINK * L);信息实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等) (1)顺序表实现堆栈运行结果吠ly¥orkshop«yTorkVC»urse高级程序设计诒言

6、I20092009®InputInputInputInput:Inputno _ no_ no_ no _ no.1 =22345:3 :4=5;6StackG54a2OutpmtOutputOut pi*tOutputOutput中的元素自顶问下为;no . no. no, no _ no .:6:5 :4Pdny ke号 to cont inue(2)学生信息链表附录(可包括源程序清单或其它说明)1) 顺序堆栈 源代码: #include<stdio.h>#include <process.h>#include<stdlib.h>#define

7、 MAX_LEN 100/ 堆栈元素类型/ 这里采用 typedef 别名机制,便于修改为别的类型 , 如: typedef double ELEMENT; typedef int ELEMENT;/ 结构体 Stackstruct StackELEMENT * List;/ 用来存储元素的顺序表int curNumber; / 用来存储当前元素的总个数;void iniStack(struct Stack * A);/ 初始化堆栈void clearStack(struct Stack * A); /清空堆栈/将当前栈顶的元素弹出栈。要求:栈不为空/返回当前栈顶的元素值。要求:栈不为空/ 判

8、断当前堆栈是否为空,空返回1,非空返回 0/自顶向下显示堆栈中的元素void push(struct Stack * A, ELEMENT obj); /将元素 obj 压入堆栈的栈顶 void pop(struct Stack * A);ELEMENT get_top(struct Stack * A); int is_empty(struct Stack * A); void display(struct Stack * A); void main()/用户输入的次数const int max_input=5;int loop;ELEMENT user_input;struct Stack

9、 * S=(struct Stack*)malloc(sizeof(struct Stack); / 申请一个堆栈对象 / 初始化 iniStack(S);for(loop=1;loop<=max_input;loop+)printf("Input no. %d :",loop); scanf("%d",&user_input); push(S, user_input);display(S);for(loop=1;loop<=max_input;loop+) if(! is_empty(S)user_input=get_top(S);

10、 pop(S);printf("Output no. %d :",loop); printf("%d n",user_input);/ 内存释放clearStack(S);free(S);/*初始化堆栈*/void iniStack(struct Stack * A)if(A!=NULL)A->List=(ELEMENT *)malloc(sizeof(ELEMENT)*MAX_LEN);A->curNumber=0;/*清空堆栈*/void clearStack(struct Stack * A) if(A!=NULL)free(A->

11、;List);A->curNumber=0; /*将元素 obj 压入以 top 为栈顶的堆栈的栈顶*/void push(struct Stack * A, ELEMENT obj) if(A->curNumber>MAX_LEN)printf(" n 堆栈中的元素总数超过最大容量! n");return;A->ListA->curNumber=obj;A->curNumber+;/*将当前栈顶的元素弹出栈。要求:栈不为空*/ void pop(struct Stack * A) if(!is_empty(A)A->curNumb

12、er-;/*返回当前栈顶的元素值。要求:栈不为空*/ELEMENT get_top(struct Stack * A) if(is_empty(A)printf("Error: Get top from empty stack. n"); exit(1); /终止程序return A->ListA->curNumber-1;/*判断当前堆栈是否为空,空返回 1,非空返回 0*/ int is_empty(struct Stack * A) return (A->curNumber=0);/*自顶向下显示堆栈中的元素*/void display(struct

13、 Stack * A) int i;printf(" Stack 中的元素 自顶向下 为: n"); for(i=A->curNumber-1;i>=0;i-)printf("%d n",A->Listi);学生信息链表源代码:void main()STUDENT_LINK* tjut; tjut=new STUDENT_LINK; iniStudentLink(tjut); Add(tjut,2007002,"Tom",'M',19); Add(tjut,2007007,"Jack&quo

14、t;,'M',20); Add(tjut,2007004,"Mary",'F',20); ShowALL(tjut);Modify(tjut,2007002,"Tom Smith",'M',19);Search(tjut,2007002);Delete(tjut,2007004);ShowALL(tjut);clearStudentLink(tjut);delete tjut;/*初始化学生链表*/void iniStudentLink(STUDENT_LINK * L)L->top=new STUD

15、ENT_NODE; /top 结点是个内容为空的 " 结点",注意其作L->top->id=0;L->top->next=NULL;/*清空学生链表*/void clearStudentLink(STUDENT_LINK * L)STUDENT_NODE *ptr; while(L->top != NULL) ptr=L->top; L->top=L->top->next; delete ptr; return;/*判断该学号的学生信息是否存在 : 存在返回 1,不存在返回 0*/ int isExist(STUDENT

16、_LINK * L,long int id) int exist;STUDENT_NODE *ptr;exist=0;ptr=L->top; while(ptr!=NULL)if(id=ptr->id) / 此学生信息已存在 exist=1;break;ptr=ptr->next;return exist;/*添加一个新同学的信息 */int Add(STUDENT_LINK * L, long int id,char name,char sex, int age) int error;int exist;STUDENT_NODE *ptr;STUDENT_NODE *nod

17、e;error=0;exist=isExist(L,id);if(exist=1)error=1;cout<<"Error! 错误添加: id = "<<id<<" 此学生信息已存在 !"<<endl; return error;ptr=L->top;while(ptr->next!=NULL)&&(ptr->next->id<id) ptr=ptr->next;node=new STUDENT_NODE; node->id=id;strcpy(no

18、de->name,name);node->sex=sex;node->age=age;/新结点插入到 ptr 结点之后node->next=ptr->next;ptr->next=node;coutvv"添加:id = "vvidvv"学生信息成功!"<<endl;return error;/ 根据学号,修改该同学的信息int Modify(STUDENT_LINK * L,long int id,char name,char sex, int age) int error;int exist;STUDEN

19、T_NODE *ptr;error=0;exist=isExist(L,id);if(exist=0)error=1;coutvv"Error! 错误修改: id = "vvidvv" 此学生信息不存在 !"vvendl; return error;ptr=L->top;while(ptr!=NULL)&&(ptr->id!=id) ptr=ptr->next;/ 修改 ptr 中的信息 strcpy(ptr->name,name); ptr->sex=sex; ptr->age=age;coutvv&

20、quot;修改:id = "vvidvv"学生信息成功!!"vvendl;/return error;根据学号,从链表中删除该同学的信息 int Delete(STUDENT_LINK * L,long int id) int error;int exist;STUDENT_NODE *ptr;STUDENT_NODE *node; error=0; exist=isExist(L,id); if(exist=0)此学生信息不存在 !"<<endl; error=1; cout<<"Error! 错误删除: id = &

21、quot;<<id<<" return error; ptr=L->top; while(ptr->next!=NULL)&&(ptr->next->id!=id) ptr=ptr->next;/结点 ptr->next 就是要删除的结点 node=ptr->next;ptr->next=ptr->next->next; delete node;!"<<endl;coutvv"删除:id = "vvidvv"学生信息成功 return

22、 error;/ 根据学号,输出显示该同学信息 int Search(STUDENT_LINK * L,long int id)int error; int exist;STUDENT_NODE *ptr; error=0;exist=isExist(L,id); if(exist=0) error=1;此学生信息不存在 !"<<endl;cout<<"Error! 错误显示: id = "<<id<<" return error; ptr=L->top; while(ptr!=NULL)&&

23、amp;(ptr->id!=id) ptr=ptr->next;/ 结点 ptr 中就是要找的结点的信息coutvv"显示:id = "vvidvv"学生信息:"<<endl; cout<<"id : "<<ptr->id<<endl;coutvv"name : "vvptr->namevvendl;cout<<"sex : "<<ptr->sex<<endl; cout<<&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论