数据结构 用c语言描述 实验四
《数据结构》(C语言)实验报告
《数据结构》实验报告姓名:**学号:*********成绩:_____目录实验一,线性表的应用 (3)实验二,栈和队列的应用 (8)实验三,数组的应用 (13)实验四,树和二叉树的应用 (19)实验五,图的应用 (24)实验六,查找表的应用 (32)实验七,排序算法的应用 (44)实验一线性表的应用【实验目的】1.熟练掌握线性表的基本操作在顺序存储和链式存储上的实现;2.以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点;3.掌握线性表的动态分配顺序存储结构的定义和基本实现;4.通过对本章实验帮助学生加深对C语言的使用(特别是函数参数调用、指针类型的应用和链表的建立等各种基本操作)。
【实验内容】约瑟夫问题的实现:n只猴子要选猴王,所有猴子按1,2,…,n编号围坐一圈,从第1只开始按1,2,…,m报数,凡报到m号的猴子退出圈外,如此循环报数,直到圈内省剩下一只猴子时,这个猴子就是猴王。
编写一个程序实现上述过程,n和m由键盘输入。
【实验要求】1.要求用顺序表和链表分别实现约瑟夫问题;2.独立完成,严禁抄袭;3.上交的实验报告由如下部分组成:①实验名称②实验目的③实验内容(问题描述,算法描述,程序清单,测试结果,算法分析)。
实验结果:一,源程序:#include<stdio.h> #include<stdlib.h>#define Maxsize 80struct SeqList{int data[Maxsize];int len;};typedef struct SeqList SeqList;void InitList(SeqList *L){L=(SeqList *)malloc(sizeof(SeqList)); L->len=0;}void MadeList(SeqList *L){int i;int people;printf("请输入参选的总数:\n"); scanf("%d",&people);for (i=0;i<people;i++){L->data[i]=i+1;printf(" %d ",L->data[i]); }printf("\n");L->len=people;}void WentList(SeqList *L){int m,i,j;int k=0;printf("请输入出列数:\n"); scanf("%d",&m);for (i=L->len;i>0;i--){k=(k+m-1)%i;printf(" %d ",L->data[k]); for (j=k;j<i-1;j++){L->data[j]=L->data[j+1]; }L->len=L->len-1;}printf("\n");}void main(){SeqList *L;InitList(L);MadeList(L);WentList(L);}二,运行结果及截屏视图:实验二栈和列队的应用【实验目的】1.熟练掌握栈和列队的结构,以及这两种数据结构的特点;2.能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空时的判断条件和描述方法;3.熟练掌握链队列和循环列表的基本运算,特别注意队列满和队列空时的判断条件和描述方法。
(完整版)数据结构(C语言版)实验报告
数据结构(C语言版) 实验报告学院计算机科学与技术专业计算机大类强化学号xxx班级xxx姓名xxx指导教师xxx实验1实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
实验要求:建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。
实验主要步骤:1、分析、理解给出的示例程序。
2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。
3、修改程序:(1)增加插入结点的功能。
(2)将建立链表的方法改为头插入法。
程序代码:#include"stdio.h"#include"string.h"#include"stdlib.h"#include"ctype.h"typedef struct node //定义结点{char data[10]; //结点的数据域为字符串struct node *next; //结点的指针域}ListNode;typedef ListNode * LinkList; // 自定义LinkList单链表类型LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表LinkList CreatList(void); //函数,用头插入法建立带头结点的单链表ListNode *LocateNode(); //函数,按值查找结点void DeleteList(); //函数,删除指定值的结点void printlist(); //函数,打印链表中的所有值void DeleteAll(); //函数,删除所有结点,释放内存ListNode * AddNode(); //修改程序:增加节点。
数据结构实验四实验报告
桂林电子科技大学2014-2015学年 第2学期数据结构 实验报告实验名称 实验四 树辅导教师意见:成绩 教师签名:院 系 计算机科学与工程学院 专业 软件工程学 号 1300330129 姓名 张涛 同 作 者 实验日期2015 年 06 月 26 日一、实验目的1.了解树二、实验具体内容1、实验题目1:(1)题目 树(2)分析实验代码:#include<iostream>#include<stdio.h>#include<conio.h>using namespace std;typedef struct btnode {int data;btnode *Lchild,*Rchild;}*Btnode;void Creat(Btnode & t) {int ch; cin>>ch;if(ch==0) t=NULL;else {btnode *p=new btnode;p->data=ch; t=p;Creat(t->Lchild);Creat(t->Rchild);} }void Preorder(Btnode & p) {if(p!=NULL) {cout<<p->data<<",";Preorder(p->Lchild);Preorder(p->Rchild); } } void Midorder(Btnode & p) {if(p!=NULL) {Midorder(p->Lchild);cout<<p->data<<",";Midorder(p->Rchild); } } void Folorder(Btnode & p) {if(p!=NULL) {Folorder(p->Lchild);Folorder(p->Rchild);cout<<p->data<<","; }} void main() {btnode *head=new btnode;cout<<"请输入数据:";Creat(head);cout<<"前序遍历:";Preorder(head);cout<<endl;cout<<"中序遍历:";Midorder(head);cout<<endl;cout<<"后序遍历:";Folorder(head);getch(); }三、实验小结。
数据结构C语言版实验报告完整版
数据结构C语言版实验报告HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】数据结构(C语言版) 实验报告专业:计算机科学与技术、软件工程学号:_______________________班级:_________软件二班______________姓名:________朱海霞______________指导教师:___刘遵仁________________青岛大学信息工程学院2013年10月实验1实验题目:顺序存储结构线性表的插入和删除实验目的:了解和掌握线性表的逻辑结构和顺序存储结构,掌握线性表的基本算法及相关的时间性能分析。
实验要求:建立一个数据域定义为整数类型的线性表,在表中允许有重复的数据;根据输入的数据,先找到相应的存储单元,后删除之。
实验主要步骤:1、分析、理解给出的示例程序。
2、调试程序,并设计输入一组数据(3,-5,6,8,2,-5,4,7,-9),测试程序的如下功能:根据输入的数据,找到相应的存储单元并删除,显示表中所有的数据。
程序代码:#include<>#include<>#define OK 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{int* elem;int length;int listsize;}Sqlist;int InitList_Sq(Sqlist &L){=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(! return -1;=0;=LIST_INIT_SIZE;return OK;}int ListInsert_Sq(Sqlist&L,int i,int e){if(i<1||i>+1) return ERROR;if=={int *newbase;newbase=(int*)realloc,+LISTINCREMENT)*sizeof(int));if(!newbase) return -1;=newbase;+=LISTINCREMENT;}int *p,*q;q=&[i-1]);for(p=&[]);p>=q;--p)*(p+1)=*p;*q=e;++;return OK;}int ListDelete_Sq(Sqlist &L,int i,int e){int *p,*q;if(i<1||i>return ERROR;p=&[i-1]);e=*p;q=+;for(++p;p<=q;++p)*(p-1)=*p;;return OK;}int main(){Sqlist L;InitList_Sq(L);ertex=a; irstedge=NULL; irstedge;G->adjlist[i].firstedge=s; irstedge;G->adjlist[j].firstedge=s; //将新结点*S插入顶点Vj的边表头部}}//=========定义标志向量,为全局变量=======typedef enum{FALSE,TRUE} Boolean;Boolean visited[MaxVertexNum];//========DFS:深度优先遍历的递归算法======void DFSM(ALGraph *G,int i){ //以Vi为出发点对邻接链表表示的图G进行DFS搜索给出你的编码//==========BFS:广度优先遍历=========void BFS(ALGraph *G,int k){ //以Vk为源点对用邻接链表表示的图G进行广度优先搜索给出你的编码//==========主函数===========void main(){int i;ALGraph *G;G=(ALGraph *)malloc(sizeof(ALGraph));CreatALGraph(G);printf("Print Graph DFS: ");DFS(G);printf("\n");printf("Print Graph BFS: "); BFS(G,3);printf("\n");}实验结果:1.邻接矩阵作为存储结构2.邻接链表作为存储结构心得体会:实验6实验题目:二分查找算法的实现实验目的:掌握二分查找法的工作原理及应用过程,利用其工作原理完成实验题目中的内容。
数据结构实验报告(C语言)(强力推荐)
数据结构实验实验内容和目的:掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。
学习基本的查找和排序技术。
让我们在实际上机中具有编制相当规模的程序的能力。
养成一种良好的程序设计风格。
实验教材:数据结构题集(C语言版)清华大学出版社2007年实验项目:实验一、栈和循环队列㈠、实验内容:①栈掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。
本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。
②循环队列掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。
本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。
㈡、实验代码①栈程序代码:#include <stdio.h>#include <malloc.h>#define Stack_Size 6#define ERROR 0#define OK 1typedef int SElemType;typedef struct SNode{SElemType data;struct SNode *next;}SNode,*LinkStack;int CreatTwo(LinkStack &head,int n){int i;SNode *p;head=(LinkStack)malloc(sizeof(SNode));head->next=NULL;printf("请输入数据(数字):\n");for(i=n;i>0;--i){p=(SNode *)malloc(sizeof(SNode));scanf("%d",&p->data);p->next=head->next;head->next=p;}return 1;}int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}int Push(LinkStack &top,SElemType e){SNode *q;q=(LinkStack)malloc(sizeof(SNode));if(!q){printf("溢出!\n");return(ERROR);}q->data=e;q->next=top->next;top->next=q;return(OK);}int Pop(LinkStack &top,SElemType &e){SNode *q;if(!top->next){printf("error!\n");return(ERROR);}e=top->next->data;q=top->next;top->next=q->next;free(q);return(OK);}void main(){ int e;LinkStack top;printf("1.初始化一个栈;\n2.PUSH;\n3.POP;\n4.显示所有栈里的元素;\n5.结束;\n");while(1){switch(menu_select()){case 1:if(CreatTwo(top,Stack_Size))printf("Success!\n");break; case 2:printf("Push:\n");scanf("%d",&e);if(Push(top,e))printf("Success!\n");break;case 3:if(Pop(top,e))printf("Success!\n");printf("%d\n",e);break;case 4:LinkStack p;printf("所有栈里的元素:\n");p=top;while(p->next){p=p->next;printf("%7d",p->data);}printf("\n");break;case 5:return;}}}运行结果:②循环队列程序代码:#include<stdlib.h>#include<stdio.h>#define OVERFLOW -1#define OK 1#define ERROR 0#define MAXSIZE 100typedef struct{int *elem;//队列存储空间int front;int rear;}SqQueue;//判断选择是否正确int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}//参数(传出)SqQueue &Q,循环队列(空)int InitQueue(SqQueue &Q){Q.elem=(int *)malloc(MAXSIZE*sizeof(int));if(!Q.elem)exit(OVERFLOW);Q.front=Q.rear=-1;for(int i=0;i<MAXSIZE;i++)Q.elem[i]=-1;return OK;}//返回Q的元素个数int QueueLength(SqQueue Q){return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}//显示队列的元素void Display(SqQueue Q){for(int i=0;i<=QueueLength(Q);i++)if(Q.elem[i]!=-1)printf("%d ",Q.elem[i]);printf("\n");}//入队int EnQueue(SqQueue &Q,int e){Q.rear=(Q.rear+1)%MAXSIZE;if(Q.rear==Q.front)return ERROR;Q.elem[Q.rear]=e;return OK;}//出队int DeQueue(SqQueue &Q,int &e){if(Q.front==Q.rear)return ERROR;e=Q.elem[Q.front+1];Q.elem[Q.front+1]=-1;Q.front=(Q.front+1)%MAXSIZE;return OK;}void main(){SqQueue Q;InitQueue(Q);int elem,e;printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);printf("1.初始化一个队列;\n2.入队;\n3.出队;\n4.显示队列的所有元素;\n5.队列长度:\n6.结束;\n");while(1){switch(menu_select()){case 1:printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);fflush(stdin);break;case 2:scanf("%d",&elem);EnQueue(Q,elem);printf("队列为:\n");Display(Q);fflush(stdin);break;case 3:DeQueue(Q,elem);printf("队列为:\n");Display(Q);break;case 4:printf("\n队列的所有元素:\n");Display(Q);break;case 5:printf("%d\n",QueueLength(Q));break;case 6:return;}}}运行结果:实验二、数组㈠、实验内容:数组一般不做插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。
c语言 数据结构实验4_厦门理工
《数据结构》实验报告实验序号:4 实验项目名称:栈的操作1.#include <iostream>#define MaxSize 100using namespace std;typedef int ElemType;typedef struct{ElemType data[MaxSize];int top;}SqStack;void InitStack(SqStack *st) //初始化栈{st->top=-1;}int StackEmpty(SqStack *st) //判断栈为空{return (st->top==-1);}void Push(SqStack *st,ElemType * x,int k) //元素进栈{int i;for(i=1;i<k;i++){if(st->top==MaxSize-1){printf("栈上溢出!\n");}else{st->top++; //移动栈顶位置st->data[st->top]=x[i-1]; //数组进栈printf("%d\n",st->data[st->top]);}}}void Pop(SqStack *st,ElemType &e,int k) //出栈{int i;for(i=1;i<k;i++){if(st->top==-1){printf("栈下溢出\n");}else{e=st->data[st->top]; //元素出栈printf("%d \n",e);st->top--; //移动栈顶位置}}}int main(){SqStack L;SqStack *st=&L;ElemType e;ElemType num [9]={1,2,3,4,5,6,7,8,9};InitStack(st);printf("入栈元素是:\n");Push(st,num,10);printf("出栈元素是:\n");Pop(st,e,10);return 0;}2.#include<stdio.h>#include<stack> //引入栈using namespace std;int main(void){int temp=1;char ch;stack<char>s;s.push('#');printf("请输入一个算法表达式,以# 结束!\n");ch=getchar();while(ch!='#'&&temp==1){if(ch=='(')s.push(ch);else if(ch==')'){if(s.top()=='#') //右括号多于左括号temp=0;elses.pop();}ch=getchar();}if(s.top()!='#') //左括号多于右括号temp=0;if(temp==0)printf("圆括号匹配错误!\n",temp);else if(temp==1)printf("圆括号匹配正确!\n",temp);return 0;}。
晓庄-数据结构(C语言版)实验报告
数据结构(C语言版) 实验报告学院信息工程学院班级15计科2班学号********姓名张旭指导教师曹晨实验一线性表基本操作和简单程序1.实验目的(1)复习Visual C++ 6.0上机调试程序的基本方法及C语言编程;(2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在链表存储结构上的程序设计方法。
2.实验要求(1)认真阅读和掌握和本实验相关的教材内容。
(2)分别以头插法和尾插法建立两个数据域定义为整型的升序单链表,再将这两个有序链表合并成一个新的无重复元素的有序链表,最后可以根据输入的数据,先找到相应的结点,后删除之。
(3)上机运行程序。
(4)保存和打印出程序的运行结果,并结合程序进行分析。
3.程序代码#include<stdio.h>#include<stdlib.h>typedef struct node{int data;struct node *next;}node;node * qbuild(node *first){int i,n,a[100];node *s;printf("输入n:");scanf("%d",&n);first=(node*)malloc(sizeof(node));first->next=NULL;for(i=0;i<n;i++){s=(node*)malloc(sizeof(node));printf("输入a[%d]:",i);scanf("%d",&a[i]);s->data=a[i];s->next=first->next;first->next=s;}return first;}node * hbuild(node *first){int i,n,a[100];struct node *s,*r;printf("输入n:");scanf("%d",&n);first=(node*)malloc(sizeof(node));r=first;for(i=0;i<n;i++){s=(node*)malloc(sizeof(node)); printf("输入a[%d]:",i);scanf("%d",&a[i]);s->data=a[i];r->next=s;r=s;}r->next=NULL;return first;}node * hebing(node *La,node *Lb){node *pa,*pb,*pc,*Lc;pa=La->next;pb=Lb->next;Lc=pc=La;while(pa && pb){if(pa->data < pb->data){pc->next =pa;pc=pa;pa=pa->next ;}else if(pa->data > pb->data){pc->next =pb;pc=pb;pb=pb->next;}else{pc->next =pa;pc=pa;pa=pa->next ;pb=pb->next ;}}pc->next =pa?pa:pb;free(Lb);return Lc;}node * shanchu(node *first,int i) {node *p,*q;p=first->next;while(p){if((p->next )->data==i){q=p->next ;p->next =q->next;free(q);break;}p=p->next;}return first;}void display(node *first){struct node *p;p=first->next;while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");}int main(){int m;struct node *a,*b,*c;a=qbuild(a);printf("打印链表a:");display(a);b=hbuild(b);printf("打印链表b:");display(b);c=hebing(a,b);printf("打印链表c:");display(c);printf("输入删除的数m:");scanf("%d",&m);c=shanchu(c,m);printf("打印删除后的链表c:");display(c);return 0;}4.实验结果输入n:5输入a[0]:9输入a[1]:5输入a[2]:4输入a[3]:3输入a[4]:1打印链表a:1 3 4 5 9输入n:5输入a[0]:1输入a[1]:3输入a[2]:4输入a[3]:6输入a[4]:8打印链表b:1 3 4 6 8打印链表c:1 3 4 5 6 8 9输入删除的数m:5打印删除后的链表c:1 3 4 6 8 9--------------------------------Process exited after 32.78 seconds with return value 0请按任意键继续. . .5.心得体会本次实验是以后实验的基础,是数据结构中最基本的东西。
数据结构实验报告c语言版
数据结构实验报告c语言版数据结构实验报告(C语言版)引言:数据结构是计算机科学中的重要概念,它关注如何在计算机中存储和组织数据以便有效地访问和操作。
本实验报告将介绍在C语言中实现的一些常见数据结构及其应用。
一、线性表线性表是最基本的数据结构之一,它是一种有序的数据元素的集合。
在C语言中,可以使用数组或链表来实现线性表。
数组具有固定大小的优点,但插入和删除操作较为复杂。
链表则可以动态地分配内存,但访问元素需要遍历整个链表。
二、栈和队列栈和队列是两种特殊的线性表。
栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表实现。
常见的应用包括函数调用、表达式求值等。
队列是一种先进先出(FIFO)的数据结构,同样可以使用数组或链表实现。
它常用于任务调度、消息传递等场景。
三、树树是一种非线性的数据结构,它由节点和边组成。
树的每个节点可以有零个或多个子节点,其中一个节点被称为根节点。
常见的树结构包括二叉树、二叉搜索树、平衡二叉树等。
树的应用广泛,例如文件系统、数据库索引等。
四、图图是由节点和边组成的非线性数据结构,它可以用来表示各种实体之间的关系。
图可以是有向的或无向的,可以是带权重的或无权重的。
图的常见应用包括社交网络、路由算法等。
在C语言中,图通常使用邻接矩阵或邻接表来表示。
五、排序算法排序算法是数据结构中的经典问题之一。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
每种排序算法都有其特点和适用场景,选择合适的排序算法可以提高程序的效率。
六、查找算法查找算法是在数据集中查找指定元素的过程。
常见的查找算法包括线性查找、二分查找、哈希查找等。
线性查找适用于无序数据集,而二分查找适用于有序数据集。
哈希查找通过散列函数将关键字映射到存储位置,可以快速定位元素。
七、实验总结通过本次实验,我们学习了C语言中常见的数据结构及其应用。
线性表、栈和队列是最基本的数据结构,树和图则提供了更灵活的数据组织方式。
数据结构实验C语言版
数据结构实验C语言版数据结构实验C语言版第一章实验目的1.熟悉C语言编程环境。
2.掌握数据结构中常用的线性结构和非线性结构。
3.学习使用C语言实现常见的数据结构操作。
4.培养解决实际问题的思维能力。
第二章实验内容1.线性表1.1 顺序表1.1.1 初始化顺序表1.1.2 在顺序表中插入元素1.1.3 删除顺序表中的元素1.1.4 查找顺序表中的元素1.1.5 显示顺序表中的元素1.2 链表1.2.1 初始化链表1.2.2 在链表中插入节点 1.2.3 删除链表中的节点 1.2.4 查找链表中的节点1.2.5 显示链表中的节点2.栈和队列2.1 栈2.1.1 初始化栈2.1.2 入栈操作2.1.3 出栈操作2.1.4 获取栈顶元素2.1.5 判断栈是否为空 2.2 队列2.2.1 初始化队列2.2.2 入队操作2.2.3 出队操作2.2.4 获取队头元素2.2.5 判断队列是否为空3.树和图3.1 二叉树3.1.1 创建二叉树3.1.2 前序遍历二叉树3.1.3 中序遍历二叉树3.1.4 后序遍历二叉树3.1.5 层序遍历二叉树3.2 图3.2.1 创建图3.2.2 深度优先搜索遍历图3.2.3 广度优先搜索遍历图3.2.4 最短路径算法3.2.5 最小树算法第三章实验步骤1.确定实验目标和需求。
2.根据实验内容,编写C语言程序。
3.调试和运行程序,验证程序的正确性。
4.根据实验结果进行分析和总结。
第四章实验结果与分析1.线性表的操作结果分析。
2.栈和队列的操作结果分析。
3.树和图的操作结果分析。
附件:________源代码文件法律名词及注释:________1.版权:________指对作品享有的本质的、来自著作权法的权益。
2.许可证:________指权利人向他人授予合法使用作品的权利的法律文件。
3.商标:________指与一种商品及其生产者和经销者有关的特定名称、标识或符号。
4.注册商标:________指在商标局进行了合法登记并取得专有权的商标。
C语言实验四实验报告
实验4:循环结构程序设计1、使用循环语句完成累乘、图像输出的程序编写。
2、掌握较复杂结构程序的编写。
3、掌握程序调试的方法。
4、编写实验报告。
二、实验内容1、已知xyz + yzz = 532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。
2、编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:44444443333322212223333344444443、学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。
4、学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下:A说:不是我。
B说:是C。
C说:是D。
D说:他胡说。
已知三个人说的是真话,一个人说的是假话。
请根据这些信息,找出做了好事的人。
三、实验内容1、已知xyz + yzz = 532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。
(1)关键源代码#include<stdio.h>Void main(void){int x,y,z;for(x=1;x<6;x++)for(y=0;y<4:y++)for(z=0;z<4;z++)if((x*100+y*10+z)+(y*100+z*10+z)==532)printf(“x=%d,y=%d,z=%d\n”,x,y,z);}(2)运行结果2、编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:4444444333332221222333334444444(1)关键源代码#include<stdio.h>void main(void){int i,j,k;int n;printf("Enter n(1~9):");scanf("%d",&n);for(i=0;i<2*n-1;i++){k=i;if(i>=n)k=2*n-2-i;for(j=0;j<k;j++)printf(" ");for(j=0;j<2*(n-k)-1;j++)printf("%d",n-k);printf("\n");}}(2)测试数据:4(3)运行结果:3、学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。
数据结构(C语言版)实验报告
实验主要步骤
( 1)数据从键盘读入; ( 2)输出要判断的字符串; ( 3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出 “ No”。
“Yes”,否则输出
程序代码 :
实验结果:
心得体会:
实验 4
实验题目 :二叉树操作设计和实现
实验目的 :
掌握二叉树的定义、性质及存储方式,各种遍历算法。
//AdjList 是邻接表类型
typedef struct {
AdjList adjlist;
//邻接表
int n,e;
// 图中当前顶点数和边数
} ALGraph;
//图类型
//========= 建立图的邻接表 =======
void CreatALGraph(ALGraph *G)
{
int i,j,k;
for(i=0;i<G->n;i++)
//建立边表
{
scanf("%c",&a);
G->adjlist[i].vertex=a;
//读入顶点信息
G->adjlist[i].firstedge=NULL; }
//边表置为空表
printf("Input edges,Creat Adjacency List\n");
实验主要步骤:
设计一个有向图和一个无向图,任选一种存储结构,完成有向图和无向图的 度优先遍历)和 BFS(广度优先遍历)的操作。
DFS(深
1. 邻接矩阵作为存储结构
#include"stdio.h"
#include"stdlib.h"
数据结构 用C语言描述 实验四
scanf("%d",&choice1); switch(choice1) {
case 1: printf("请输入入栈元素:"); scanf("%d",&x); Push(&s1,x); print(s1); break; case 2: Pop(&s1,&k); print(s1); break; case 3: print(s1); break; case 0: break; } }while(choice1!=0); break; case 2: InitStack_L(&s2); do{ printf("请输入您的选择:1.入栈 2.出栈 3.打印 0.退出\n"); scanf("%d",&choice2); switch(choice2) { case 1: printf("请输入入栈元素:"); scanf("%d",&y); Push(&s2,y); print(&s2); break;
LinkStack p=s->next; printf("栈中的元素为:"); while(p!=NULL) {printf("%4d",p->data); p=p->next;} printf("\n"); } int main() { int choice0,choice1,choice2,x,y,i,k; SeqStack s1; LinkStackNode s2; do{
三、 实 验 过 程
1、实验题目 [问题描述]
以下题目根据自己兴趣和能力可选作一道作为实验题目: (1)根据栈的数据结构,建立一个顺序栈和链栈并实现对其基本操作; (2)根据队列的数据结构,建立一个循环队列和链队并实现对其基本操作; (3)根据教材 4.3.3 节介绍的思想,设计并实现一个对简化表达式求值的系统 (4)银行业务队列简单模拟。设某银行有 A、B 两个业务窗口,其中 A 窗口的 处理速度是 B 窗口的 2 倍,给定到达银行的顾客序号,请按业务完成的顺序输 出顾客序列(假设奇数编号到 A 窗口办理,偶数编号到 B 窗口办理,不同窗口 同时处理完 2 个顾客,A 窗口优先输出)。 [基本要求] (1)按实验内容编写完整的程序,并上机验证。 (2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。 [测试数据] 由学生依据软件工程的测试技术自己确定。注意测试边界数据。 2、源程序 #include<stdio.h> #include<malloc.h> #define Stack_Size 100 #define StackElementType int #define TRUE 1
数据结构(C语言版) 实验报告
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告第一章引言本实验报告主要介绍了在C语言环境下进行数据结构实验的相关内容。
数据结构是计算机科学中最基础的一门课程,它主要涉及到如何将数据组织和存储以便高效地访问和操作。
本实验报告将按照以下章节进行详细介绍。
第二章实验目的本实验的主要目的是通过实践操作,加深对数据结构的理解,并运用C语言编写相应的数据结构代码。
第三章实验环境1.操作系统:________Windows 102.编程语言:________C语言3.开发工具:________Visual Studio Code第四章实验内容1.线性表1.1 顺序表的实现1.1.1 初始化线性表1.1.2 插入操作1.1.3 删除操作1.1.4 查找操作1.2 链表的实现1.2.1 单链表的创建和遍历1.2.2 单链表的插入和删除操作 1.2.3 单链表的反转1.3 栈1.3.1 栈的实现1.3.2 栈的应用1.4 队列1.4.1 队列的实现1.4.2 队列的应用2.树2.1 二叉树的实现2.1.1 二叉树的创建和遍历2.1.2 二叉树的查找操作2.1.3 二叉树的插入和删除操作2.2 平衡二叉树2.2.1 平衡二叉树的实现2.2.2 平衡二叉树的插入和删除操作 2.3 堆2.3.1 堆的实现2.3.2 堆的操作2.4 哈夫曼树2.4.1 哈夫曼树的构建2.4.2 哈夫曼编码和解码3.图3.1 图的表示方法3.1.1 邻接矩阵3.1.2 邻接表3.2 图的遍历算法3.2.1 深度优先搜索(DFS)3.2.2 广度优先搜索(BFS)3.3 最小树3.3.1 Kruskal算法3.3.2 Prim算法3.4 最短路径3.4.1 Dijkstra算法3.4.2 Floyd算法第五章实验结果本实验通过编写相关的数据结构代码和算法,成功实现了线性表、树和图的基本功能。
经测试,各功能模块能正常运行,并能给出正确的结果。
数据结构c语言版算术四则混合运算实验报告
数据结构c语言版算术四则混合运算实验报告一、引言在计算机科学领域,算术四则运算是最基本的运算之一。
本实验旨在通过使用C语言编写程序,实现算术四则运算的混合运算功能。
通过该实验,我们可以提高对数据结构的理解,并掌握在C语言中实现算术四则混合运算的方法。
二、实验目的1. 理解算术四则运算的基本原理;2. 掌握数据结构在算术四则运算中的应用;3. 使用C语言编写程序,实现算术四则混合运算功能。
三、实验方法1. 首先,我们需要定义并实现一个栈数据结构,用于存储运算符和操作数;2. 然后,通过读取用户输入的表达式,将其中的运算符和操作数依次入栈;3. 在入栈的过程中,我们需要判断运算符的优先级,以确保正确的运算顺序;4. 最后,通过出栈的方式,按照正确的运算顺序进行运算,并输出结果。
四、实验步骤1. 定义并实现栈数据结构,包括入栈、出栈等基本操作;2. 读取用户输入的表达式,并将其中的运算符和操作数依次入栈;3. 根据运算符的优先级,确定出栈的顺序,并进行相应的运算;4. 将运算结果入栈,继续进行下一轮的运算,直到表达式中的所有运算符和操作数都被处理完毕;5. 最后,将最终的运算结果出栈,并输出。
五、实验结果通过本实验,我们成功实现了算术四则混合运算的功能。
经过多组测试,程序能够正确处理各种复杂的运算表达式,并给出正确的结果。
六、实验总结通过本次实验,我们进一步加深了对数据结构的理解,并成功将其应用于算术四则混合运算中。
我们掌握了C语言中实现算术四则混合运算的方法,并通过编写程序实现了该功能。
通过本次实验,我们不仅提高了对数据结构的应用能力,还提升了编程能力和问题解决能力。
在今后的学习和工作中,我们将继续深入研究数据结构和算法,不断提升自己的编程技术,为解决实际问题提供更好的解决方案。
七、致谢感谢指导老师对本实验的支持和指导,感谢实验室的同学们在实验过程中给予的帮助和建议。
本次实验的顺利完成离不开你们的支持与帮助。
数据结构C语言版 实验报告
数据结构C语言版实验报告《数据结构 C 语言版实验报告》一、实验目的本次实验旨在通过使用 C 语言实现常见的数据结构,加深对数据结构基本概念和操作的理解,提高编程能力和问题解决能力。
二、实验环境操作系统:Windows 10编程环境:Visual Studio 2019三、实验内容1、线性表顺序表的实现链表的实现(包括单向链表、双向链表)2、栈和队列栈的实现(顺序栈、链栈)队列的实现(顺序队列、循环队列、链队列)3、数组和字符串数组的基本操作字符串的操作(字符串的存储、字符串的比较、字符串的连接等)4、树和二叉树二叉树的遍历(前序、中序、后序)二叉树的创建和基本操作5、图图的存储(邻接矩阵、邻接表)图的遍历(深度优先遍历、广度优先遍历)四、实验步骤1、线性表顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。
实现顺序表的初始化、插入、删除、查找等操作。
编写测试程序,对顺序表的各种操作进行测试。
链表的实现定义单向链表和双向链表的数据结构,包括节点结构体。
实现链表的创建、插入、删除、查找等操作。
编写测试程序,验证链表操作的正确性。
栈的实现定义顺序栈和链栈的数据结构。
实现栈的入栈、出栈、栈顶元素获取等操作。
进行栈的操作测试。
队列的实现定义顺序队列、循环队列和链队列的数据结构。
实现队列的入队、出队、队头队尾元素获取等操作。
对队列的操作进行测试。
3、数组和字符串数组的操作实现数组的初始化、元素访问、数组元素的修改等。
测试数组的基本操作。
字符串的操作定义字符串的存储方式。
实现字符串的比较、连接、复制等操作。
编写测试用例,验证字符串操作的准确性。
二叉树的遍历采用递归方式实现二叉树的前序、中序、后序遍历。
输出遍历结果进行验证。
二叉树的创建和基本操作构建二叉树的数据结构。
实现二叉树的节点插入、删除等操作。
5、图图的存储分别用邻接矩阵和邻接表来存储图。
实现图的初始化操作。
图的遍历用深度优先遍历和广度优先遍历算法对图进行遍历。
C语言实验报告(四)
C语⾔实验报告(四)C语⾔实验报告(四)⼀、实验⽬的1.掌握C语⾔中函数和模块2.掌握怎样定义函数,如何调⽤或使⽤函数,如何声明函数3.掌握函数的参数,了解在函数调⽤时,参数是如何传递的4.在使⽤函数的过程中怎样确定函数的参数5.如何使⽤局部变量和全局变量⼆、实验内容1. 偶数判断描述: 编写⼀个⽤户⾃定义函数,该函数有⼀个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。
编写⼀个程序,从键盘输⼊m个整数,分别调⽤⽤户⾃定义函数来判断这m个整数的奇偶性。
输⼊: 第⼀⾏为⼀个整数m,表⽰要判断m个整数的奇偶性;紧接着是m⾏,每⾏⼀个整数。
输出:有m⾏,分别对应输⼊的第2到第m+1⾏的整数的奇偶性样例输⼊: 216样例输出: 奇数偶数·程序代码:#include"stdio.h"int isEven(int a){if(a%2==0)return 1;elsereturn 0;}int main(){int m,i,b;scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d",&b);if(isEven(b)==1)printf("偶数\n");elseprintf("奇数\n");}return 0;}2.温度转换描述: 编写⼀个⽤户⾃定义函数,函数的功能是:将华⽒温度转F换为摄⽒温度C。
转换公式为:C=5*(F-32)/9。
编写⼀个程序,输出指定范围的华⽒温度与摄⽒温度的对照表,其中华⽒温度步长为4。
输⼊: 两个空格隔开的整数n,m(且0输出: 华⽒温度与摄⽒温度的对照表样例输⼊: 32 45样例输出: 32 0.0036 2.2240 4.4444 6.67·程序代码:#include "stdio.h"float conver(int f){return 5*(f-32)/9.0;}int main(){int n,m,i;scanf("%d%d",&n,&m);for(i=n;i<=m;i+=4)printf("%d%10.2f\n",i,conver(i));return 0;}3.最⼤值函数描述:编写⼀个⽤户⾃定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最⼤值,函数的返回值为三个参数的最⼤值。
数据结构c语言实验报告
数据结构c语言实验报告数据结构C语言实验报告引言:数据结构是计算机科学中的重要概念,它是指一组数据的组织方式和存储结构,以及对这组数据进行操作的方法。
在本次实验中,我们将使用C语言来实现一些常见的数据结构,并测试其功能和性能。
一、线性表线性表是最基本的数据结构之一,它是一种有序的数据元素序列。
我们使用C语言中的数组来实现线性表,并实现了插入、删除、查找等操作。
通过实验,我们发现在插入和删除操作频繁的情况下,使用链表实现的线性表性能更好。
二、栈栈是一种特殊的线性表,它的插入和删除操作只能在同一端进行。
我们使用C语言中的数组来实现栈,并实现了入栈和出栈操作。
通过实验,我们发现栈在递归算法、表达式求值等场景中有着重要的应用。
三、队列队列也是一种特殊的线性表,它的插入操作在一端进行,删除操作在另一端进行。
我们使用C语言中的数组来实现队列,并实现了入队和出队操作。
通过实验,我们发现队列在模拟排队、调度算法等场景中有着广泛的应用。
四、二叉树二叉树是一种特殊的树形结构,每个节点最多有两个子节点。
我们使用C语言中的结构体来实现二叉树,并实现了先序、中序和后序遍历等操作。
通过实验,我们发现二叉树在搜索算法、排序算法等场景中有着重要的应用。
五、图图是一种复杂的非线性结构,它由节点和边组成。
我们使用C语言中的邻接矩阵和邻接表来实现图,并实现了深度优先搜索和广度优先搜索等操作。
通过实验,我们发现图在社交网络分析、路径规划等领域有着广泛的应用。
六、排序算法排序算法是数据结构中的重要内容,它用于将一组无序的数据按照某种规则进行排序。
我们使用C语言实现了常见的排序算法,如冒泡排序、插入排序、选择排序、快速排序等。
通过实验,我们比较了这些排序算法的性能和稳定性。
七、性能分析在实验过程中,我们使用了时间复杂度和空间复杂度来评估数据结构的性能。
时间复杂度表示算法执行所需的时间,空间复杂度表示算法执行所需的内存空间。
通过实验,我们了解了不同数据结构和算法的性能特点,为实际应用提供了参考依据。
数据结构(C语言版) 实验报告
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告1:引言1.1 问题描述在本实验中,我们需要设计一个基于C语言的数据结构,用于解决特定问题。
1.2 目的本实验的目的是通过设计和实现数据结构,加深对数据结构和C语言的理解,并应用所学的知识解决实际问题。
1.3 相关工作在这一章节中,我们将介绍与本实验相关的先前工作,并分析其优缺点,为我们的设计提供参考。
2:需求分析2.1 功能需求本节将详细描述所设计的数据结构需要实现的功能。
2.2 性能需求在这一节中,我们将明确数据结构的性能需求,例如时间复杂度和空间复杂度限制。
3:数据结构设计3.1 数据结构定义在这一节中,我们将给出所设计数据结构的定义,并详细说明每个字段的含义和作用。
3.2 数据结构操作在这一节中,我们将详细描述每个数据结构操作的实现。
这些操作包括插入,删除,查找等。
4:算法设计4.1 算法描述在这一节中,我们将给出在实现数据结构过程中使用的算法的详细描述。
我们将分析算法的时间复杂度,并讨论其优缺点。
4.2 算法优化在这一节中,我们将分析并设计优化算法,以提高数据结构的性能。
5:实验结果在这一节中,我们将给出实验结果,并分析实验数据。
我们还将展示实验中所涉及的示例输入和输出。
6:结论在这一节中,我们将总结本实验的设计和实现,并讨论所得实验结果的意义和潜在的改进方向。
7:附录本文档附带以下附件:- 代码实现:包含所设计数据结构的C语言源代码。
- 实验数据文件:包含用于测试数据结构的示例输入和输出文件。
8:法律名词及注释本文档中涉及的法律名词及注释见附件。
数据结构c语言版实验报告
数据结构c语言版实验报告数据结构C语言版实验报告一、实验目的本次实验的目的是通过使用C语言编程,实现几种常见的数据结构,包括栈、队列和链表,并进行相关操作的实现和测试。
二、实验内容1. 栈的实现与应用栈是一种先进后出的数据结构,常用于实现递归、表达式求值和内存管理等场景。
在本次实验中,我们使用C语言实现了一个基于数组的顺序栈,并进行了以下操作的实现和测试:- 入栈(push):将元素插入到栈顶。
- 出栈(pop):将栈顶元素删除并返回。
- 获取栈顶元素(top):返回栈顶元素的值。
- 判断栈是否为空(isEmpty):判断栈是否为空栈。
2. 队列的实现与应用队列是一种先进先出的数据结构,常用于实现任务调度、消息传递和缓冲区等场景。
在本次实验中,我们使用C语言实现了一个基于数组的顺序队列,并进行了以下操作的实现和测试:- 入队(enqueue):将元素插入到队尾。
- 出队(dequeue):将队头元素删除并返回。
- 获取队头元素(front):返回队头元素的值。
- 判断队列是否为空(isEmpty):判断队列是否为空队列。
3. 链表的实现与应用链表是一种动态数据结构,常用于实现链式存储和数据的插入、删除等操作。
在本次实验中,我们使用C语言实现了一个单链表,并进行了以下操作的实现和测试:- 头插法(insertAtHead):在链表头部插入元素。
- 尾插法(insertAtTail):在链表尾部插入元素。
- 删除节点(deleteNode):删除指定节点。
- 查找节点(searchNode):查找指定节点的位置。
三、实验结果通过对栈、队列和链表的实现和测试,我们得到了以下实验结果:1. 栈的实现和操作的正确性得到了验证,栈的入栈、出栈、获取栈顶元素和判断是否为空的功能均正常运行。
2. 队列的实现和操作的正确性得到了验证,队列的入队、出队、获取队头元素和判断是否为空的功能均正常运行。
3. 链表的实现和操作的正确性得到了验证,链表的头插法、尾插法、删除节点和查找节点的功能均正常运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s->next=NULL;
}
int Push(SeqStack *s,StackElementType x) //顺序栈进栈
{
if(s->top==Stack_Size-1)
return(FALSE);
s->top++;
s->elem[s->top]=x;
return(TRUE);
}
int Pop(SeqStack *s,StackElementType *x) //顺序栈出栈
LinkStackNode s2;
do{
printf("请输入您的选择:1.我要对顺序栈进行操作 2.我要对链栈进行操作 0.退出\n");
scanf("%d",&choice0);
switch(choice0)
{
case 1:
InitStack(&s1);
do{
printf("请输入您的选择:1.入栈 2.出栈 3.打印 0.退出\n");
{
StackElementType data;
struct node *next;
}LinkStackNode;
typedef LinkStackNode *LinkStack;
void InitStack(SeqStack *s) //初始化顺序栈
{
s->top=-1;
}
void InitStack_L(LinkStackNode *s) //初始化链栈
[基本要求]
(1)按实验内容编写完整的程序,并上机验证。
(2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
2、源程序
#include<stdio.h>
#include<malloc.h>
#define Stack_Size 100
实验四
实验名称栈和队列及其应用实验性质设计性实验学时数4学时
一、实验目的
1.掌握栈与队列的抽象数据类型描述及特点。
2.掌握栈和队列的顺序和链式存储结构与基本算法实现。
3.掌握栈和队列在实际问题中的应用和基本编程技巧。
二、实验内容
1.栈和队列在不同存储结构上进行插入、删除等操作的算法。
2.通过栈或队列解决现实中的一些问题。
temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));
if(temp==NULL) return(FALSE);
temp->data=x;
temp->next=top->next;
top->next=temp;
return(TRUE);
}
int Pop(LinkStack top,StackElementType *x) //链栈出栈
三、
实
验
过
程
1、实验题目
[问题描述]
以下题目根据自己兴趣和能力可选作一道作为实验题目:
(1)根据栈的数据结构,建立一个顺序栈和链栈并实现对其基本操作;
(2)根据队列的数据结构,建立一个循环队列和链队并实现对其基本操作;
(3)根据教材4.3.3节介绍的思想,设计并实现一个对简化表达式求值的系统
(4)银行业务队列简单模拟。设某银行有A、B两个业务窗口,其中A窗口的处理速度是B窗口的2倍,给定到达银行的顾客序号,请按业务完成的顺序输出顾客序列(假设奇数编号到A窗口办理,偶数编号到B窗口办理,不同窗口同时处理完2个顾客,A窗口优先输出)。
scanf("%d",&choice1);
switch(choice1)
{
case 1:
printf("请输入入栈元素:");
scanf("%d",&x);
Push(&s1,x);
print(s1);
break;
case 2:
Pop(&s1,&k);
print(s1);
break;
case 3:
print(s1);
#define StackElementType int
#define TRUE 1
#define FALSE 0
typedef struct //顺序栈
{
StackElementType elem[Stack_Size];
int top;
}SeqStack;
typedef struct node //链栈
else
{
printf("栈里的元素为:");
do
{
printf("%4d",s.elem[s.top]);
s.top--;
}while(s.top!=-1);
printf("\n");
}
}
int Push(LinkStack top,StackElementType x) //链栈进栈
{
LinkStackNode*temp;
break;
case 0:
break;
}
}while(choice1!=0);
break;
case 2:
InitStack_L(&s2);
do{
printf("请输入您的选择:1.入栈 2.出栈 3.打印 0.退出\n");
scanf("%d",&choice2);
switch(choiLinkStack p=s->next;
printf("栈中的元素为:");
while(p!=NULL)
{printf("%4d",p->data);
p=p->next;}
printf("\n");
}
int main()
{
int choice0,choice1,choice2,x,y,i,k;
SeqStack s1;
break;
}
}while(choice2!=0);
break;
case 0:
break;
}
printf("*******谢谢您的使用*******\n");
}while(choice0!=0);
return 0;
}
{
if(s->top==-1)
return(FALSE);
else
{
*x=s->elem[s->top];
s->top--;
printf("出栈元素为:%d",*x);
return(TRUE);
}
}
void print(SeqStack s) //打印顺序栈
{
int i;
if(s.top==-1)
printf("栈为空:\n ");
{
LinkStackNode *temp;
temp=top->next;
if(temp==NULL)
return(FALSE);
top->next=temp->next;
*x=temp->data;
free(temp);
return(TRUE);
}
void print(LinkStack s) //打印链栈
printf("请输入入栈元素:");
scanf("%d",&y);
Push(&s2,y);
print(&s2);
break;
case 2:
Pop(&s2,&i);
printf("出栈元素为:%d \n",i);
print(&s2);
break;
case 3:
print(&s2);
break;
case 0: