数据结构课程设计文章编辑附录中有全部代码
数据结构课程设计报告含代码完整版
数据结构课程设计报告含代码HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】西安邮电学院数据结构课程设计报告题目:校园导航系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月11日~2011年12月15日一. 设计目的1.通过本次课程设计巩固《数据结构》中所学的内容;2.提高自己上机编程以及调试能力。
二. 设计内容1.设计所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1. 可以手动创建一个校园图。
2. 可以直接从文件读取校园各个景点的信息。
3. 可选择从任意个景点作为起点进行遍历。
4. 输入景点序号查询该景点相关信息。
5. 输入两个景点查询两个景点的最短,最佳及其所有的路径。
6. 将校园图信息保存入文件。
四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1. Adjmatrix *g即结构体对象在main()中被创建在其他子函数中进行参数传递。
2. 全局变量visited数组中用。
3. 全局变量shorest[][],path[][]在floyd()中被赋值来分别记录v[i]-v[j]最短路径和 v[i]-v[j]所经过景点。
3.重点设计及编码两景点最短距离弗洛伊德算法void floyd(adjmatrix *g){int i,j,k;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)shortest[i][j]=0;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++){shortest[i][j]=g->arcs[i][j].adj;path[i][j]=0;}for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)for(k=0;k<g->vexnum;k++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}五.测试数据及运行结果1.正常测试数据和运行结果要求提供3组正常测试数据和运行结果2(遍历功能)1(起始景点序号)1 校门呈长方形,校训:爱国、求实、奋进2 喷泉呈鸽子形状,喷射出水花3 教学楼传授知识和学习知识4 实验楼供学生进行课程实验和教师办公5 洗浴中心供学生洗澡,内设单人间和双人间6 美食广场仅一层,快餐味道不错7 图书馆共七层,存储大量书籍供学生查阅和学习8 旭日苑共三层,主要的就餐场所9 体育馆内设篮球场,羽毛球场和观看席10 宿舍休息的场所5(查询景点信息)2(景点序号)2 喷泉呈鸽子形状,喷射出水花6(查询两景点最短路径)1 9(两景点序号)1->2->7->91->9 最短距离:570米2.异常测试数据及运行结果要求提供2组异常测试数据和运行结果9无此功能模块请重新输入5(功能模块)11(景点序号)无此景点请重新输入六.调试情况,设计技巧及体会1.改进方案1. 可将景点文件,边文件及账户密码合并为一个文件。
数据结构课程设计报告模板(内附C代码)
数据结构课程设计报告学院专业:软件工程班级:学号:学生姓名:指导老师:彭伟民日期: 2016.01.01目录1猴子吃桃子问题 (3)1.1 需求分析 (3)1.2 程序设计思想 (3)1.3 程序源代码 (3)1.4 程序运行结果 (5)2进制数转化问题 (5)2.1 需求分析 (5)2.2 程序设计思想 (6)2.3 程序源代码 (6)2.4 程序运行结果 (7)3长整数运算 (8)3.1 需求分析 (8)3.2 程序设计思想 (8)3.3 程序源代码 (8)3.4 程序运行结果 (12)4学生成绩管理系统 (13)4.1 需求分析 (13)4.2 程序设计思想 (13)4.3 程序源代码 (14)4.4 程序运行结果 (20)5哈夫曼编码应用 (22)5.1 需求分析 (22)5.2 程序设计思想 (22)5.3 程序源代码 (23)5.4 程序运行结果 (24)6学校超市选址问题 (26)6.1 需求分析 (26)6.2 程序设计思想 (26)6.3 程序源代码 (26)6.4 程序运行结果 (30)7学生成绩管理系统 (30)7.1 需求分析 (30)7.2 程序设计思想 (30)7.3 程序源代码 (30)7.4 程序运行结果 (36)8排序综合 (37)8.1 需求分析 (37)8.2 程序设计思想 (38)8.3 程序源代码 (38)8.4 程序运行结果 (46)9课程设计总结 (47)1猴子吃桃子问题1.1需求分析有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
1.2程序设计思想已知第十天只余下1个桃子,第一天开始每天都吃当前桃子一半再多一个,那么就只需要从第十天开始倒推即可,用链表、数组、递推、常规方法都可以采用这种思路实现计算第一天桃子数量。
1.3程序源代码#include<iostream>using namespace std;//有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
数据结构全部代码
引言:数据结构是计算机科学中非常重要的一门基础课程,它涉及到用于组织、管理和存储数据的各种方法和技术。
数据结构的学习对于编程和算法的理解至关重要。
本文将深入讨论数据结构的各种代码实现,包括数组、链表、树、堆以及图等。
概述:数据结构的代码实现是指将数据结构的抽象概念转化为实际的编程实现。
这些代码实现提供了一种将数据组织在计算机存储中的方法,并且支持各种对数据的操作。
下面将分别介绍数组、链表、树、堆以及图的代码实现。
正文内容:1.数组1.1创建数组1.2访问数组元素1.3修改数组元素1.4插入元素到数组中1.5从数组中删除元素2.链表2.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.2AVL树的实现3.2.2在AVL树中插入节点3.2.3从AVL树中删除节点3.2.4平衡AVL树3.2.5遍历AVL树4.堆4.1最大堆的实现4.1.1创建最大堆4.1.2插入元素到最大堆4.1.3从最大堆中删除元素4.1.4获取最大堆的最大值4.1.5堆排序4.2最小堆的实现4.2.1创建最小堆4.2.2插入元素到最小堆4.2.3从最小堆中删除元素4.2.4获取最小堆的最小值4.2.5堆排序5.图5.1邻接矩阵的实现5.1.1创建邻接矩阵5.1.2在邻接矩阵中插入边5.1.3从邻接矩阵中删除边5.1.4遍历邻接矩阵5.1.5判断两个节点是否相邻5.2邻接表的实现5.2.1创建邻接表5.2.2在邻接表中插入边5.2.3从邻接表中删除边5.2.4遍历邻接表5.2.5判断两个节点是否相邻总结:。
数据结构完整代码
(线性表顺序存储)#include"string.h"#include"ctype.h"#include"stdio.h"#include"stdlib.h"#include"io.h"#include"math.h"#include"time.h"#define OK1#define ERROR0#define TRUE1#define FALSE0#define MAXSIZE20/*存储空间初始分配量*/ typedef int Status;/*Status是函数的类型,其值是函数结果状态代码,如OK等*/typedef int ElemType;/*ElemType类型根据实际情况而定,这里假设为int*/Status visit(ElemType c){printf("%d",c);return OK;}typedef struct{ElemType data[MAXSIZE];/*数组,存储数据元素*/int length;/*线性表当前长度*/}SqList;/*初始化顺序线性表*/Status InitList(SqList*L){L->length=0;return OK;}/*初始条件:顺序线性表L已存在。
操作结果:若L为空表,则返回TRUE,否则返回FALSE*/Status ListEmpty(SqList L){if(L.length==0)return TRUE;elsereturn FALSE;}/*初始条件:顺序线性表L已存在。
操作结果:将L重置为空表*/Status ClearList(SqList*L){L->length=0;return OK;}/*初始条件:顺序线性表L已存在。
操作结果:返回L 中数据元素个数*/int ListLength(SqList L){return L.length;}/*初始条件:顺序线性表L已存在,1≤i≤ListLength(L)*/ /*操作结果:用e返回L中第i个数据元素的值,注意i 是指位置,第1个位置的数组是从0开始*/Status GetElem(SqList L,int i,ElemType*e){if(L.length==0||i<1||i>L.length)return ERROR;*e=L.data[i-1];return OK;}/*初始条件:顺序线性表L已存在*//*操作结果:返回L中第1个与e满足关系的数据元素的位序。
数据结构课设(完整代码可直接运行)附注释
char adjvex;//最小生成树的节点
int lowcost;//到该节点的最小权值开销
}closedges[MAX_VERTEX_NUM];
int option; //图的类型标识符
int visited[MAX_VERTEX_NUM]; //顶点访问标记数组
for(i=1;i<=G.vexnum;++i) {//输入矩阵的各顶点
fflush(stdin); //清除缓存,略过
scanf("%c",&G.vexs[i]);
}//for
if(G.kind==DG||G.kind==UDG){//1.有向图和无向图的矩阵创建
for(i=1;i<=G.vexnum;i++)//矩阵初始化
if(!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREAMENT;
}
*S.top++=e;
return OK;
}
/*·················元素出栈··········*/
int Pop(SqStack &S,int &e){
··········*/
int LocateVex(ALGraph G,char v){
int m;
for(m=1;m<=G.vexnum;m++){
if(G.vertices[m].data==v) return m;
}
printf("您输入的顶点不存在");
数据结构课程设计(附代码)-数据结构设计说明
应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计容说明1. 项目一(1) 对设计任务容的概述学生成绩管理**任务:要现对学生资料的录入、浏览、插入和删除等功能。
输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。
存储结构:采用线性链式结构。
(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。
2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。
并将其存入链表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
数据结构课程设计文章编辑附录中有全部代码精修订
数据结构课程设计文章编辑附录中有全部代码GE GROUP system office room 【GEIHUA16H-GEIHUA GEIHUA8Q8-课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:文章编辑问题起止时间:2013年6 月24 日至2013年7 月12 日问题描述静态存储一页文章,每行最多不超过80个字符,共N行,程序可以统计出文字、数字、空格的个数,并且可以对文章中特定内容进行查找及替换,同时也可以删除指定内容。
基本要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)查找出文章中某一段文字,并用其他文字进行替换;(4)删除某一子串,并将后面的字符前移。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";(3)查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果;(4)输出删除某一字符串后的文章;实现提示存储结构使用线性表,分别用几个子函数实现相应的功能,并且使用菜单的形式,可以选择所要进行的操作(查找、替换、删除、统计等)。
文章编辑系统1概要设计本次课程设计的题目是文章编辑系统,本系统的功能描述如下:用户新建文本、浏览新建文本、文本字符统计、指定字符串统计、指定字符串删除、指定字符串替换等操作。
1.新建文本2.浏览输入文本3.文本字符统计4.指定字符串统计5.指定字符串删除6.指定字符串替换7.退出系统本系统包含七个功能模块,分别为:新建文本模块,浏览输入文本模块,指定字符串统计模块,指定字符串删除模块,指定字符串删除模块,指定字符串替换模块以退出系统模块。
新建文本模块实现用户录入文本信息,并且系统自动保存录入信息。
浏览输入文本模块实现了显示用户录入信息的功能。
数据结构课程设计 文章编辑 源代码
#include <stdio.h>#include<stdlib.h>#include <string.h>#include<malloc.h>#define MAXSIZE 1000typedef char DataType;typedef struct node{DataType ch[MAXSIZE];struct node *next;}Lstring;/*****输入文章*****/Lstring *input(){Lstring *p,*head;int i=0;printf ("请输入一页文章,若要换行,请直接敲回车键,若想结束请按@:\n");p=(Lstring *)malloc(sizeof(Lstring));head=p;p->ch[i]=NULL;p->next=NULL;char str[200];while(1){gets(str);if(strlen(str)>100){printf("每行最多输入100字符");break;}if(str[0]==64){str[0]='\0';p->ch[0]=str[0];break;}p->next=(Lstring *)malloc(sizeof(Lstring));strcpy(p->ch,str);if(str[strlen(str)-1]==64){p->ch[strlen(str)-1]='\0';break;}p=p->next;}p->next=NULL;return head;}/****输出文章*****/Lstring *OutPut(Lstring *head){Lstring *p=head;do{printf("%s\n",p->ch);}while((p=p->next)!=NULL);return head;}/****统计字母的个数*****/int Alphabet(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if((p->ch[i]>='a'&&p->ch[i]<='z')||(p->ch[i]>='A'&&p->ch[i]<='Z')) count++;}while((p=p->next)!=NULL);return count;}/****统计数字的字数*****/int Num(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if(p->ch[i]>='0' && p->ch[i]<='9')count++;}while((p=p->next)!=NULL);return count;}/****统计空格的字数*****/int Space(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if(p->ch[i]==32)count++;}while((p=p->next)!=NULL);return count;}/*统计文章的总字数*/int All(Lstring *head){Lstring *p=head;int count=0;do{count+=strlen(p->ch);}while((p=p->next)!=NULL);return count;}/****串的简单模式匹配*****/int FindString(Lstring *head,char *str){Lstring *p=head;int count=0;int h=0;int len1=0;int len2=strlen(str);int i,j,k;do{len1=strlen(p->ch);for(i=0;i<len1;i++){if(p->ch[i]==str[0]){k=0;for(j=0;j<len2;j++)if(p->ch[i+j]==str[j]) k++;if(k==len2){count++;i=i+k-1;}}}}while((p=p->next)!=NULL);return count;}void delstringword(char *s,char *str){char *p;int count,len,i,j;char s1[80];p=strstr(s,str);len=strlen(s);i=len-strlen(p);j=i+strlen(str);count=0;for(int m=0;m<i;m++)s1[count++]=s[m];for(int n=j;n<len;n++)s1[count++]=s[n];s1[count]='\0';strcpy(s,s1);}Lstring *DelString(Lstring *head,char *str){Lstring *p=head;do{while(strstr(p->ch,str)!=NULL)delstringword(p->ch,str);}while((p=p->next)!=NULL);return head;}void main(){int i=0;int m;Lstring *head;char s1[20],s2[20];head=input();printf("输入的文章为:\n");head=OutPut(head);printf("\n");printf("全部字母数:%d \n",Alphabet(head));printf("数字个数:%d \n",Num(head));printf("空格个数: %d \n",Space(head));printf("文章总字数: %d \n",All(head));printf("\n");printf("**********************\n");printf("* 菜单 *\n");printf("**********************\n");printf("* 1---统计字符串 *\n");printf("* 2---删除字符串 *\n");printf("* 0---退出 *\n");printf("**********************\n");do{printf("请输入你要选择的操作(0~2):");scanf("%d",&m);switch(m){case 0:exit(0);break;case 1:printf("请输入要统计的字符串:");scanf("%s",&s1);printf("%s在文章中出现的次数为:%d \n",s1,FindString(head,s1));printf("\n");break;case 2:printf("请输入要删除的某一字符串:");scanf("%s",&s2);head=DelString(head,s2);printf("删除%s后的文章为:\n",s2);OutPut(head);break;}}while(m!=0);}。
数据结构课程设计代码
数据结构课程设计代码根据提供的输入输出需求,下面是一个示例的数据结构课程设计代码。
```pythonclass Node:def __init__(self, data):self.data = dataself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef add(self, data):new_node = Node(data)if self.head is None:self.head = new_nodeelse:current = self.headwhile current.next is not None:current = current.nextcurrent.next = new_nodedef remove(self, data):current = self.headprev = Nonewhile current is not None:if current.data == data:if prev is None:self.head = current.next else:prev.next = current.next returnprev = currentcurrent = current.nextdef display(self):current = self.headwhile current is not None:print(current.data, end=" ")current = current.nextprint()if __name__ == "__main__":linked_list = LinkedList()while True:print("1. Add element")print("2. Remove element")print("3. Display elements")print("4. Quit")choice = input("Enter your choice: ")if choice == "1":data = input("Enter element to add: ")linked_list.add(data)elif choice == "2":data = input("Enter element to remove: ")linked_list.remove(data)elif choice == "3":linked_list.display()elif choice == "4":breakelse:print("Invalid choice")```这个代码示例实现了一个简单的链表数据结构,在命令行中提供了添加元素、删除元素和显示元素的选项。
《数据结构》的全部代码实现C语言
/* c1.h (程序名) */#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 *//* algo2-1.c 实现算法2.1的程序*/#include"c1.h"typedef int ElemType;#include"c2-1.h"/*c2-1.h 线性表的动态分配顺序存储结构*/#define LIST_INIT_SIZE 10 /* 线性表存储空间的初始分配量*/#define LISTINCREMENT 2/* 线性表存储空间的分配增量*/typedef struct{ElemType*elem; /* 存储空间基址*/int length; /* 当前长度*/int listsize; /* 当前分配的存储容量(以sizeof(ElemType)为单位) */}SqList;#include"bo2-1.c"/* bo2-1.c 顺序表示的线性表(存储结构由c2-1.h定义)的基本操作(12个) */ Status InitList(SqList*L) /* 算法2.3 */{ /* 操作结果:构造一个空的顺序线性表*/(*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!(*L).elem)exit(OVERFLOW); /* 存储分配失败*/(*L).length=0; /* 空表长度为0 */(*L).listsize=LIST_INIT_SIZE; /* 初始存储容量*/return OK;}Status DestroyList(SqList*L){ /* 初始条件:顺序线性表L已存在。
数据结构课程设计报告有代码
西安邮电学院数据结构课程设计报告题目:校园导航系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月11日~2011年12月15日一. 设计目的1.通过本次课程设计巩固《数据结构》中所学的内容;2.提高自己上机编程以及调试能力。
二. 设计内容1.设计所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1. 可以手动创建一个校园图。
2. 可以直接从文件读取校园各个景点的信息。
3. 可选择从任意个景点作为起点进行遍历。
4. 输入景点序号查询该景点相关信息。
5. 输入两个景点查询两个景点的最短,最佳及其所有的路径。
6. 将校园图信息保存入文件。
主程序 景点信息介绍输入各个景点的遍历校园平面图显示图的建立与修改景点信息路径查询文件的读取与保存密码退出程序四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1. Adjmatrix *g 即结构体对象在main()中被创建在其他子函数中进行参数传递。
判断密码显示menu调用相应函数 返回主菜单密码3次错误密码正确输入密码具体分函数退出程序开始管理系统程序是否退出?执行函数相应的操作arcnumfile() vernumfile() readvernum() floyd() creatdn() shortload() search() locatevertex() findvernum() depthfirstsearch() creatvisited() readarcnum() main()2. 全局变量visited数组visited数组在creatvisited()中被初始化,然后再在depthfirstsearch()中用。
数据结构完整代码简版
数据结构完整代码数据结构完整代码1. 简介数据结构是计算机科学中的一个重要概念,用于组织和管理数据的方式。
在许多实际应用中,我们需要根据不同的需求选择合适的数据结构来存储和操作数据。
本文将介绍常见的数据结构,包括数组、链表、栈、队列和树,并提供完整的代码实现示例。
2. 数组(Array)数组是一种线性数据结构,用于存储固定大小的相同类型元素的集合。
数组的元素通过索引进行访问,索引是从0开始的整数。
以下是一个简单的数组实现示例代码:```pythonclass Array:def __init__(self, size):self.size = sizeself.data = [None] sizedef get(self, index):if index < 0 or index >= self.size:return Nonereturn self.data[index]def set(self, index, value):if index < 0 or index >= self.size:return Noneself.data[index] = value```3. 链表(Linked List)链表是一种常见的动态数据结构,它由多个节点组成,每个节点包含数据和指向下一个节点的指针。
链表的特点是在内存中不连续存储,而是通过指针将各个节点连接起来。
以下是一个简单的链表实现示例代码:```pythonclass Node:def __init__(self, value):self.value = valueself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef append(self, value):new_node = Node(value)if not self.head:self.head = new_nodeelse:curr_node = self.headwhile curr_node.next:curr_node = curr_node.next curr_node.next = new_nodedef remove(self, value):curr_node = self.headif curr_node.value == value:self.head = curr_node.nextreturnwhile curr_node.next:if curr_node.next.value == value:curr_node.next = curr_node.next.nextreturncurr_node = curr_node.next```4. 栈(Stack)栈是一种基于后进先出(LIFO)原则的数据结构,只能在一端进行插入和删除操作。
数据结构课程设计报告(附源代码)-学生管理系统
课程设计报告(一)一.报告题目:学生管理系统二.实验目的:1.熟悉线性链表,掌握线性链表的基本操作;2.练习求线性表中指定结点元素及修改指定结点的元素、求指定结点的前驱/后继元素、删除指定结点的元素、在指点节点位置插入元素等。
3.通过文件保存和读取文件来提升文件操作的能力;4.C语言编程能力的提升训练。
三.实验环境:C语言编程,VC++6.0编程工具实现。
四.软件系统结构1.总体架构/层次:2.各功能的实现流程图:函数6:文件装入功能实现流程图函数7:文件保存功能实现流程图函数8:退出菜单功能实现流程图五.软件功能设计:本软件是要编写一个学生管理系统,一个学生有很多相关数据,包括学号、姓名、性别、年龄、家庭住址、练习电话,因此我们利用线性链表的知识来编写程序,这是因为线性链表有很多优良的特点,因此该程序是对线性链表的应用练习。
本软件利用线性链表的特点,结合文件相关函数的运用,它能够实现以下功能:1.用结点的数据域存放学生的学号、姓名、性别、年龄、家庭住址、练习电话;2.利用结点的指针域访问某个结点的前驱或者后继;3.录入新学生信息并按非降序插入到链表中;4.查找给定学号的结点学生信息;5.删除给定学号的结点学生信息;6.修改给定学号的结点学生信息;7.显示全部结点的学生信息;8.将链表中的学生信息全部存入文件;9.将已存在的学生信息文件中的学生信息按学号非降序插入到当前链表中;六.源程序代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>#define NAMELEN 15#define ADDRLEN 10#define TELLEN 15#define OVERFLOW 0#define ERROR 0#define FALSE 0#define OK 1#define TRUE 1struct stud{ long num;char name[NAMELEN+1];char sex;int age;char Addr[ADDRLEN+1];long rxsj;char lxfs[TELLEN+1];};typedef stud ElemType;//链表结点元素为结构体FILE *fp;typedef struct LNode{ElemType data;LNode *next;} *LinkList;//typedef LNode *;int InitList(LinkList &L){ //操作结果:构造一个空的线性表LL=(LinkList )malloc(sizeof(LinkList));//产生头结点,并使L指向头结点if(!L)//存储分配失败exit(OVERFLOW);L->next=NULL;// 指针域为空return OK;}int ListTraverse(LinkList L,void(*vi)(ElemType)){//条件:线性表已存在//操作结果:一次对L的每个数据元素调用函数vi()。
数据结构课程设计文章编辑附录中有全部代码
数据结构课程设计文章编辑附录中有全部代码12020年4月19日课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:文章编辑问题起止时间: 6 月24 日至 7 月12 日问题描述静态存储一页文章,每行最多不超过80个字符,共N行,程序能够统计出文字、数字、空格的个数,而且能够对文章中特定内容进行查找及替换,同时也能够删除指定内容。
基本要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)查找出文章中某一段文字,并用其它文字进行替换;(4)删除某一子串,并将后面的字符前移。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";(3)查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果;(4)输出删除某一字符串后的文章;实现提示存储结构使用线性表,分别用几个子函数实现相应的功能,而且使用菜单的形式,能够选择所要进行的操作(查找、替换、删除、统计等)。
32020年4月19日文章编辑系统1概要设计本次课程设计的题目是文章编辑系统,本系统的功能描述如下:用户新建文本、浏览新建文本、文本字符统计、指定字符串统计、指定字符串删除、指定字符串替换等操作。
1.新建文本2.浏览输入文本3.文本字符统计4.指定字符串统计5.指定字符串删除6.指定字符串替换7.退出系统本系统包含七个功能模块,分别为:新建文本模块,浏览输入文本模块,指定字符串统计模块,指定字符串删除模块,指定字符串删除模块,指定字符串替换模块以退出系统模块。
新建文本模块实现用户录入文本信息,而且系统自动保存录入信息。
浏览输入文本模块实12020年4月19日现了显示用户录入信息的功能。
指定字符串统模块实现了对英文字母数和空格数及整篇文章总字数的统计。
数据结构课程设计-文章编辑(附录中有全部代码)
课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:文章编辑问题起止时间:2013年6 月24 日至2013年7 月12 日问题描述静态存储一页文章,每行最多不超过80个字符,共N行,程序可以统计出文字、数字、空格的个数,并且可以对文章中特定内容进行查找及替换,同时也可以删除指定内容。
基本要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)查找出文章中某一段文字,并用其他文字进行替换;(4)删除某一子串,并将后面的字符前移。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";(3)查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果;(4)输出删除某一字符串后的文章;实现提示存储结构使用线性表,分别用几个子函数实现相应的功能,并且使用菜单的形式,可以选择所要进行的操作(查找、替换、删除、统计等)。
文章编辑系统1概要设计本次课程设计的题目是文章编辑系统,本系统的功能描述如下:用户新建文本、浏览新建文本、文本字符统计、指定字符串统计、指定字符串删除、指定字符串替换等操作。
1.新建文本2.浏览输入文本3.文本字符统计4.指定字符串统计5.指定字符串删除6.指定字符串替换7.退出系统本系统包含七个功能模块,分别为:新建文本模块,浏览输入文本模块,指定字符串统计模块,指定字符串删除模块,指定字符串删除模块,指定字符串替换模块以退出系统模块。
新建文本模块实现用户录入文本信息,并且系统自动保存录入信息。
浏览输入文本模块实现了显示用户录入信息的功能。
指定字符串统模块实现了对英文字母数和空格数及整篇文章总字数的统计。
指定字符串统计实现了统计用户自定义字符串个数的功能。
数据结构课程设计报告(有代码 C语言)-仓库管理系统
第一章系统目标〔三号楷体加粗〕仓库管理应用程序系统可以实现信息屡次追参加录、信息显示、删除信息、修改信息、查询信息、价格升序等根本功能,这些功能模块都用函数的形式来实现。
学生信息保存在文件中,需要时可以随时从文件中读取出来。
方便用户随时可查询。
进行仓库管理。
第二章系统分析〔三号楷体加粗〕正文〔四号楷体〕明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。
开始运行时界面如下:你可以根据所对应的信息提示进行操作便可对其进行数据的记录与查询。
第三章系统设计第四章系统实现正文〔四号楷体〕给出具体的实现环境〔如用什么语言?在什么操作系统?〕用C语言编程,用cokeblock编译器,在windows xp操作系统下编译成功。
给出主函数和每个算法的实现代码。
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<ctype.h>#include<string.h>#define SIZE 100typedef struct{char name[10];char fam[10];int pay;int num;}Store;typedef struct node{Store elem;struct node *next;}In;In *head=NULL;void appendInfo();void List();void menu(void);In*Init();void Start();void Insert();void Del();void renew();void Wsave();void Read();void SortUp();void PreFile();int main(){char select;PreFile();menu();while((select=toupper(getch()))!='0'){system("cls");switch (select){case '1' :{Start();system("pause");menu();break;}case '2':{appendInfo();system("pause");menu();break;}case '3':{Insert();system("pause");menu();break;}case '4':{Del();system("pause");menu();break;}case '5':{renew();system("pause");menu();break;}case '6':{List();system("pause");menu();break;}case '7':{SortUp();system("pause");menu();break;}case 'W':{Wsave();system("pause");menu();break;}case 'R':{Read();system("pause");menu();break;}default:printf("Input error!\n");system("pause");menu();break;}}return 0;}In*Init(){In*L;L=(In*)malloc(sizeof(In));L->next=NULL;return L;}void appendInfo(){int i,j;In*p,*s;A1:printf("请输入要存放的记录数:");scanf("%d",&j);if(j<=0){printf("Input error!\n");goto A1;}if(head==NULL){p=Init();head=p;}else{p=head->next;while(p->next!=NULL)p=p->next;}for(i=0;i<j;i++){s=Init();printf("名称品牌单价数量\n");scanf("%s",&s->);scanf("%s",&s->elem.fam);scanf("%d",&s->elem.pay);scanf("%d",&s->elem.num);p->next=s;p=s;}}void List(){In *p;if(head==NULL){printf("None of information about products.\n");return;}elsep=head->next;printf("名称品牌单价数量\n");while(p!=NULL){printf("%s\t%s\t%d\t%d\n",p->,p->elem.fam,p->elem.pay,p->elem.num);p=p->next;}}void menu(){system("cls");printf("|-------------------------------------------|\n");printf(" |---------------家电仓库管理----------------|\n");printf(" | 请输入选项编号|\n");printf("|-------------------------------------------|\n");printf(" | 1--数据初始化|\n");printf(" | 2--创立数据表|\n");printf(" | 3--数据插入|\n");printf(" | 4--数据删除|\n");printf(" | 5--数据更新|\n");printf(" | 6--数据查询|\n");printf(" | 7--单价升序|\n");printf(" | w--数据保存|\n");printf(" | r--数据读出|\n");printf(" | 0--系统退出(exit) |\n");printf("|-------------------------------------------|\n");printf("请输入你的选择:");}void Start(){char com;printf("你想清空所有资料吗?〔Y/N〕:");fflush(stdin);com=getchar();if(com=='Y'||com=='y'){printf("已经初始化了、、、\n");head=NULL;return;}else printf("资料仍在、、、\n");return ;}void Insert(){In*pi,*p;char str[10];printf("请问要在哪个学生后面插入〔输入姓名〕:");fflush(stdin);gets(str);pi=Init();printf("名称品牌单价数量\n");scanf("%s",&pi->);scanf("%s",&pi->elem.fam);scanf("%d",&pi->elem.pay);scanf("%d",&pi->elem.num);if(head==NULL){printf("前面没有数据,默认接在表头。
数据结构课程设计:文章编辑系统源代码
数据结构课程设计:文章编辑系统源代码#include"stdio.h"#include"string.h"#include"math.h"#include"malloc.h"#include#include#include"time.h"#include#include#include#include"stdlib.h"#pragma comment(lib,"WinMM.Lib")typedef struct Line{char data[100];//每行内容用这样一个结点存放struct Line *next;}Line,*Article;int m=0;//该全局变量用来改变系统所使用的语言..登录时默认语言为中文int times;//此全局变量为删除和替换字符串时使用int ii;//跟times同一功能int tt=0;int colori=1;int music=0;//设置系统颜色void color(){int col;col=colori;if(m!=1){printf("\t\t ¤1.黑底白字");printf("\t\t●2.蓝底红字\n");printf("\t\t ¤3.白底黑字");printf("\t\t●4.绿底红字\n");printf("\t\t ¤5.红底绿字");printf("\t\t●6.白底紫字\n");printf("\t\t ¤7.紫底白字");printf("\t\t●8.黑底黄字\n");printf("\t\t ¤9.黑底蓝字");printf("\t\t●10.黑底灰字\n");printf("\t\t ¤11.白底红字");printf("\t●0.返回\n\n");printf("\t 请输入你要更换的颜色并回车:"); scanf("%d",&colori);if(colori==0)colori=col;switch(colori){case 1:system("color 07");break;case 2:system("color 9c");break;case 3:system("color f0");break;case 4:system("color 2c");break;case 5:system("color c2");break;case 6:system("color fd");break;case 7:system("color df");break;case 8:system("color 0e");break;case 9:system("color 09");break;case 10:system("color 08");break;case 11:system("color fc");break;case 0:break;default:printf("\t\t输入错误!");system("pause");break;}}else{printf("\t ¤1.Black and White");printf("\t\t●2.Blue and Red\n");printf("\t ¤3.White and Black");printf("\t\t●4.Green and Red\n");printf("\t ¤5.Red and Green");printf("\t\t●6.White and purple\n");printf("\t ¤7.Purple and White");printf("\t●8.Black and Yellow\n");printf("\t ¤9.Black and Blue");printf("\t\t●10.Black and Gray\n");printf("\t ¤11.White and Red");printf("\t\t●0.Exit\n\n");printf("\t Please select the number of color and then preass enter:");scanf("%d",&colori);if(colori==0)colori=col;switch(colori){case 1:system("color 07");break;case 2:system("color 9c");break;case 3:system("color f0");break;case 4:system("color 2c");break;case 5:system("color c2");break;case 6:system("color fd");break;case 7:system("color df");break;case 8:system("color 0e");break;case 9:system("color 09");break;case 10:system("color 08");break;case 11:system("color fc");break;case 0:break;default:printf("\t\tERROR!");system("pause");break; }}}void restorecolor(){switch(colori){case 1:system("color 07");break;case 2:system("color 9c");break;case 3:system("color f0");break;case 4:system("color 2c");break;case 5:system("color c2");break;case 6:system("color fd");break;case 7:system("color df");break;case 8:system("color 0e");break;case 9:system("color 09");break;case 10:system("color 08");break;case 11:system("color fc");break;}}//从文件中读取void ReadFile(Article &head){Line *p,*tail=head;char s[100];FILE *fp;if((fp=fopen("D:\\article.txt","r"))==NULL)//先判断文章是否存在{if(m!=1)printf("\n\t\t无法读取article.txt文件中的文章!\n");elseprintf("\n\t\tthe file of article.txt can't be read!\n");return;}while((fgets(s,100,fp))!=NULL){s[strlen(s)-1]='\0';p=(Line*)malloc(sizeof(Line));p->next=NULL;strcpy(p->data,s);if(head==NULL)head=p;elsetail->next=p;tail=p;}if(m!=1)printf("\n\t\t已成功从D盘的article.txt目录中读取文章!\n");elseprintf("\n\t\tThe article in D:\article.txt has succeed to read!\n");fclose(fp);}//更改后保存到文件中void SaveArticle(Article head){FILE*fp;char s[100];int n;Line *p=head;if((fp=fopen("D:\\article.txt","w"))==NULL){if(m!=1)printf("\n\t\t无法打开article.txt文件中的文章!\n");elseprintf("\n\t\tCan not open file article.txt!\n");return;}while(p != NULL) //将文章写入文件中{strcpy(s,p->data);n=strlen(s);s[n]='\n';s[n+1]='\0';fputs(s,fp);p=p->next;}fclose(fp);}//是否要保存到文本中??...新建文章void CreateFile(Article head){FILE*fp;char s[100];int n;Line *p=head;if((fp=fopen("D:\\article.txt","w"))==NULL){if(m!=1)printf("\n\t\t无法打开article.txt文件中的文章!\n"); elseprintf("\n\t\tCan not open file article.txt!\n"); return;}while(p!=NULL) //将文章写入文件中{strcpy(s,p->data);n=strlen(s);s[n]='\n';s[n+1]='\0';fputs(s,fp);p=p->next;}if(m!=1)printf("\n\t\t文章已成功写入D盘的article.txt目录中!\n");elseprintf("\n\t\tThe article has been successfully written in the D:article.txt!\n");fclose(fp);}//是否现在输入内容在指定盘里存放该文章void CreateArticle(Article &head){Line *p,*tail;char ch[100];if(m!=1)printf("\n\t\t请输入文章内容(按ctrl+e结束):\n");elseprintf("\n\t\tPlease input the content,end with (ctrl+e):\n");while(1){gets(ch);p=(Line*)malloc(sizeof(Line));p->next=NULL;strcpy(p->data,ch);if(p->data[strlen(p->data)-1]==5) {p->data[strlen(p->data)-1]='\0'; break;}if(head==NULL){head=p;tail=p;}else{tail->next=p;tail=tail->next;}}if(strlen(p->data)>0){if(head==NULL){head=p;tail=p;}else{tail->next=p;tail=tail->next;}}}//是否保存文章到指定目录的文件void IsSave(Article head){char ch;if(m!=1)printf("\t\t是否要将文章保存到指定目录的文件中?\n\t\t若是,请输入Y,若否,按其它任意键:");elseprintf("\t\tDo you want to save the file to the directory?\n\t\tIf yes,please input Y,or input any keys:");ch=getchar();if(ch=='Y'||ch=='y')CreateFile(head);}//计算中文个数int CountChinese(Article head){int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if(p->data[i]<0)num++;}p=p->next;}return num/2;}//计算字母个数int CountLetter(Article head){int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if(('a'<=p->data[i]&&'z'>=p->data[i])||('A'<=p->data[i]&&' Z'>=p->data[i]))num++;}p=p->next;}return num;}//计算空格个数int CountSpace(Article head) {int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if(p->data[i]==' ')num++;}p=p->next;}return num;}//计算数字个数int CountFigure(Article head){int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if('0'<=p->data[i]&&p->data[i]<='9')num++;}p=p->next;}return num;}//计算总字数int CountArticle(Article head){int num=0;num=CountLetter(head)+CountSpace(head)+CountFigure(h ead)+CountChinese(head);return num;}//找串...统计某一字符串在文章中出现的次数,并输出该次数int FindString(Article head,char *s){int num=0;Line *p=head;int i,j,k=1,t;int n,mm;while(p!=NULL){n=strlen(p->data);mm=strlen(s);for(i=0;i<=(n-mm);){k=1;for(j=i,t=0;t<mm;j++,t++)if(p->data[j]!=s[t]){k=0;break;}if(k){num++;i=i+strlen(s);}else}p=p->next;}return num;}//删除模块(删除全部要删除的串)char* delstring1(char *ch,char *s) {int n=strlen(ch),mm=strlen(s); int i,j,k,t;for(i=0;i<=n-mm;){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t]){k=0;break;}if(k){for(j=i;j<n;j++)ch[j]=ch[j+mm];ch[j]='\0';}elsen=strlen(ch);}return ch;}//全部删除void DeleteString1(Article &head,char *s){Line *p=head;while(p!=NULL){strcpy(p->data,delstring1(p->data,s));p=p->next;}if(m!=1)printf("\t\t全部已成功删除!\n");elseprintf("\t\tDelete all successfully!\n");}void delprint(char *ch,char *s){int i;int mm=strlen(s);char c[100];int k;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_G</n;j++)</mm;j++,t++)</mm;j++,t++)</n;i++)</n;i++)</n;i++)</n;i++)REEN);for(i=ii,k=0;i<ii+mm;i++,k++)c[k]=ch[i];c[k]='\0';printf("%s",c);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAN DLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);}//判断该行是否出现该字符串,出现返回1int deljudge(char *ch,char *s){int n=strlen(ch),mm=strlen(s);int i,j,k,t;for(i=ii;i<=n-mm;i++){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t])k=0;break;}if(k){times++;ii=i;return 1;}}return 0;}char* delstring2(char *ch,char *s) {int n=strlen(ch),mm=strlen(s); int i,j,k,t;for(i=ii;i<=n-mm;i++){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t]){k=0;break;}if(k)for(j=i;j<n;j++)ch[j]=ch[j+mm];ch[j]='\0';ii=i;break;}}if(m!=1)printf("\t\t删除成功!\n");elseprintf("\t\tDelete successfully!\n");return ch;}//删除模块(删除一个指定位置要删除的串)void DeleteString2(Article &head,char *s){Line *p=head;int flag;char c;int mm=strlen(s);int i;ii=0;times=0;while(p!=NULL) //这里出现的问题应该还是读入问题1!!{flag=deljudge(p->data,s);if(flag)if(m!=1)printf("\t\t第%d次出现该字符串的所在行如下:\n",times);elseprintf("\t\tThe line that this string appears the %d time is:\n",times);for(i=0;i<ii;i++)printf("%c",p->data[i]);delprint(p->data,s);for(i=ii+mm;idata);i++)printf("%c",p->data[i]);printf("\n");if(m!=1)printf("\t\t是否要删除?\n\t\tY是,N否:");elseprintf("\t\tDelete or not?\n\t\tY to yes,N to no:");c=getchar(); getchar();if(c=='Y'||c=='y')strcpy(p->data,delstring2(p->data,s));elseii+=mm;printf("\n");if(m!=1)printf("\t\t是否要继续删除?\n\t\tY是,N否:");elseprintf("continue to delete?\n\t\tY to yes ,N to no:");c=getchar();getchar();if(c=='N'||c=='n')break;}else{p=p->next;ii=0;}}if(m!=1)printf("\t\t删除结束!\n");elseprintf("\t\tDeleting ends!\n");}//删除管理模块void deletemanage(Article &head,char *s){int choice;if(m!=1)printf("\t\t1.全部删除\n\t\t2.部分删除\n\n\t\t请选择:");elseprintf("1.Delete all\n 2.Delete sections\n\n\t\tPlease select:"); scanf("%d",&choice);getchar();if(choice==1)DeleteString1(head,s);elseDeleteString2(head,s);}//字符串替换//全部替换char* repstring1(char *ch,char *s1,char *s2) {int n,mm,x,y;int i,j,k,t;n=strlen(ch);mm=strlen(s1);for(i=0;i<=n-mm;){k=1;for(j=i,t=0;t<mm;t++,j++)if(ch[j]!=s1[t]){k=0;break;}if(k){x=strlen(s2);if(x<=mm){for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t</x;t++,j++)</mm;t++,j++)</ii;i++)</n;j++)</mm;j++,t++)</mm;j++,t++)</ii+mm;i++,k++)];for(t=mm+i;j<n;j++,t++)ch[j]=ch[t];ch[j]='\0';}else{y=x-mm;for(t=n-1;t>=mm+i;t--)ch[t+y]=ch[t];ch[n+y]='\0';for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t];}i=i+x;}elsei++;}return ch;}void ReplaceString1(Article &head,char *s1,char *s2)//s2替换s1{Line *p=head;while(p!=NULL){strcpy(p->data,repstring1(p->data,s1,s2));p=p->next;}if(m!=1)printf("\t\t全部已成功替换!\n");elseprintf("\t\tReplace all successfully!\n");}//部分替换void repprint(char *ch,char *s){int i;int mm=strlen(s);char c[100];int k;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAN DLE), FOREGROUND_RED | FOREGROUND_GREEN);for(i=ii,k=0;i<ii+mm;i++,k++)c[k]=ch[i];c[k]='\0';printf("%s",c);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAN DLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);}int repjudge(char *ch,char *s){int n=strlen(ch),mm=strlen(s);int i,j,k,t;for(i=ii;i<=n-mm;i++){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t]){k=0;break;}if(k){times++;ii=i;return 1;}}return 0;}char* repstring2(char *ch,char *s1,char *s2) {int n,mm,x,y;int i,j,k,t;n=strlen(ch);mm=strlen(s1);for(i=ii;i<=n-m;i++){k=1;for(j=i,t=0;t<mm;t++,j++)if(ch[j]!=s1[t]){k=0;break;}if(k){x=strlen(s2);if(x<=mm){for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t];for(t=mm+i;j<n;j++,t++)ch[j]=ch[t];ch[j]='\0';}else{y=x-mm;for(t=n-1;t>=mm+i;t--)ch[t+y]=ch[t];ch[n+y]='\0';for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t];}ii=i+strlen(s2);break;}}if(m!=1)printf("\t\t替换成功!\n");elseprintf("\t\tReplace successfully!\n");return ch;}void ReplaceString2(Article &head,char *s1,char *s2)//s2替换s1{Line *p=head;int flag;char c;int i;int mm=strlen(s1);ii=0;times=0;while(p!=NULL){flag=repjudge(p->data,s1);if(flag){if(m!=1)printf("\t\t第%d次出现该字符串的所在行如下:\n",times);elseprintf("\t\tThe line that this string appears the %d time is:\n",times);for(i=0;i<ii;i++)printf("%c",p->data[i]);repprint(p->data,s1);for(i=ii+mm;idata);i++)printf("%c",p->data[i]);printf("\n");if(m!=1)printf("\t\t是否要替换?\n\t\tY是,N否:");elseprintf("\t\tReplace or not?\n\t\tY to yes ,N to no:");c=getchar(); getchar();if(c=='Y'||c=='y')strcpy(p->data,repstring2(p->data,s1,s2));elseii+=mm;printf("\n");if(m!=1)printf("\t\t是否要继续替换?\n\t\tY是,N否:");elseprintf("\t\tContinue to replace?\n\t\tY to yes ,N to no:");c=getchar();getchar(</ii;i++)</x;t++,j++)</n;j++,t++)</x;t++,j++)</mm;t++,j++)</mm;j++,t++)</ii+mm;i++,k++)</x;t++,j++)</n;j++,t++));if(c=='N'||c=='n')break;}else{p=p->next;ii=0;}}if(m!=1)printf("\t\t替换结束!\n");elseprintf("\t\tReplacing ends!\n");}void PrintArticle(Article head);//删除和替换结束后是否输出删除后或替换后的文章void IsPrint(int mm,Article head){char ch;if(mm==1){if(m!=1)printf("\t\t是否要输出续写后的文章?\n\t\tY是,N否:");elseprintf("\t\tDo you want to output the followed article?\n\t\tY to yes,N to no:");ch=getchar();if(ch=='Y'||ch=='y')PrintArticle(head);}if(mm==2){if(m!=1)printf("\t\t是否要输出替换后的文章?\n\t\tY是,N否:");elseprintf("\t\tDo you want to output the replaced article?\n\t\tY to yes,N to no:");ch=getchar();if(ch=='Y'||ch=='y')PrintArticle(head);}}//替换管理模块void replacemanage(Article &head,char *s1,char*s2){int choice;if(m!=1)printf("\t\t1.全部替换\n\t\t2.部分替换\n\n\t\t请选择:");elseprintf("\t\t1.Replace all\n\t\t2.Replace sections\n\n\t\tPlease select:");scanf("%d",&choice);getchar();if(choice==1)ReplaceString1(head,s1,s2);elseReplaceString2(head,s1,s2);}void PrintArticle(Article head){Line *p;int n,i;p=head;if(head==NULL){if(m!=1)printf("\t\t该文章中没有内容!\n");elseprintf("\t\tThe article is empty!\n"); }else{if(m!=1){ printf("\n\n\n ┎━━━━━━━━━━┒\n"); printf(" ┃ 该文章的内容如下┃\n"); printf(" ┖━━━━━━━━━━┚\n\n");}else{printf("\n\n\n ┎━━━━━━━━━━┒\n"); printf(" ┃ The article is ┃\n");printf(" ┖━━━━━━━━━━┚\n\n");}}while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++)printf("%c",p->data[i]);printf("\n");p=p->next;}}//追加模块void CatchArticle(Article &head){Line*p=head,*tail;char ch[100];if(m!=1)printf("\t\t请输入要续写的文章内容(按ctrl+e结束):\n");elseprintf("\t\tPlease input the content following with the article(end with ctrl+e):\n");if(head==NULL){CreateArticle(head);}else{while(p->next!=NULL)p=p->next;tail=p;while(1){gets(ch);p=(Line*)malloc(sizeof(Line));p->next=NULL;strcpy(p->data,ch);if(p->data[strlen(p->data)-1]==5){p->data[strlen(p->data)-1]='\0';break;}tail->next=p;tail=tail->next;}if(strlen(p->data)>0){tail->next=p;tail=tail->next;}}}void diaoshi();void menu(){int i;if(m!=1){if(tt!=0){printf("\n\n");diaoshi();printf("\n\n\n\</n;i++)n");}for(i=1;i<=19;i++)printf("★☆"); printf("\n☆ ★");printf("\n★ 这里是文章编辑系统☆"); printf("\n★ ☆\n");for(i=1;i<=19;i++)printf("☆★");printf("\n\n");printf("\t\t¤1.新建文章\t\t");printf("●2.读取文章\n");printf("\t\t¤3.输出文章\t\t");printf("●4.文章统计\n");printf("\t\t¤5.文章编辑\t\t");printf("●6.更改语言\n");printf("\t\t¤7.选择颜色\t\t");printf("●8.帮助说明\n");//关于系统使用的介绍说明及关于我们的团队介绍printf("\t\t¤9.背景音乐");printf("\t\t●0.返回\n");printf("\n");}else{if(tt!=0){printf("\n\n");diaoshi();printf("\n\n\n\n");}for(i=1;i<=19;i++)printf("☆★");printf("\n★ ☆");printf("\n☆ This is article editing system ★");printf("\n☆ ★\n");for(i=1;i<=19;i++)printf("★☆");printf("\n\n");printf("\t¤1.creat a new article\t\t");printf("●2.read the article\n");printf("\t¤3.output the article\t\t");printf("●4.article statistic\n");printf("\t¤5.edit the article\t\t");printf("●6.change language\n");printf("\t¤7.select color\t\t");printf("●8.help(about)\n");printf("\t¤9.background music\t\t");printf("●0.exit\n");}}void tongjimenu(Article head){if(m!=1){printf("\n\n\n ┎━━━━━━━━━━┒\n");printf(" ┃ 统计结果如下┃\n");printf(" ┖━━━━━━━━━━┚\n\n");printf("\t\t\t文章中的字母数为:%d\n",CountLetter(head)); printf("\t\t\t文章中的空格数为:%d\n",CountSpace(head)); printf("\t\t\t文章中的数字数为:%d\n",CountFigure(head)); printf("\t\t\t文章中的汉字数为:%d\n",CountChinese(head)); printf("\t\t\t文章的总字数为:%d\n",CountArticle(head));}else{printf("\n\n\n ┎━━━━━━━━━━━━━━┒\n");printf(" ┃ The statistical result is ┃\n");printf(" ┖━━━━━━━━━━━━━━┚\n\n");printf("\t\t\tthe number of letters is:%d\n",CountLetter(head));printf("\t\t\tthe number of blank space is:%d\n",CountSpace(head));printf("\t\t\tthe number of figures is:%d\n",CountFigure(head));printf("\t\t\tthe number of Chinese is:%d\n",CountChinese(head));printf("\t\t\tthe number of the total words is:%d\n",CountArticle(head));}}void editmenu(){if(m!=1){printf("\n\n\n\t\t ┏━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t ┃ 文章编辑┃\n");printf("\t\t ┗━━━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t ↙ ┃ ┃ ↘\n");printf("\t\t ┏━━┓ ┏━━┓ ┏━━┓ ┏━━┓\n");printf("\t\t ┃1、┃ ┃2、┃ ┃3、┃ ┃4、┃\n");printf("\t\t ┃字符┃ ┃字符┃ ┃字符┃ ┃续写┃\n");printf("\t\t ┃ 串┃ ┃ 串┃ ┃ 串┃ ┃ ┃\n");printf("\t\t ┃统计┃ ┃删除┃ ┃替换┃ ┃文章┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃\n");printf("\t\t ┗━━┛ ┗━━┛ ┗━━┛ ┗━━┛\n\n");printf("\t\t ●-● ●-● ●-● ●-●\n");printf("\t\t ¤ ¤\n");printf("\t\t ¤ 0、返回上层菜单¤\n");printf("\t\t ¤ ¤\n");printf("\t\t ●-● ●-● ●-● ●-●\n");}else{printf("\n\n\n\t\t ┏━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t ┃ edit the article ┃\n");printf("\t\t ┗━━━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t ↙ ┃ ┃ ↘\n");printf("\t\t ┏━━━━┓ ┏━━━━┓ ┏━━━━┓┏━━━━┓\n");printf("\t\t ┃1、┃ ┃2、┃ ┃3、┃┃4、┃\n");printf("\t\t ┃sum up ┃ ┃delete ┃ ┃replace ┃┃continue┃\n"); printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃┃to write┃\n");printf("\t\t ┃string ┃ ┃string ┃ ┃string ┃┃ the ┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃┃ article┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃┃ ┃\n");printf("\t\t ┗━━━━┛ ┗━━━━┛ ┗━━━━┛┗━━━━┛\n\n");printf("\t\t ●-● ●-● ●-● ●-● ●-● ●-●\n");printf("\t\t ¤ ¤\n");printf("\t\t ¤ 0、Return to the above menu ¤\n");printf("\t\t ¤printf("\t\t ●-● ●-● ●-● ●-● ●-● ●-●\n");}}//文章编辑模块的实现void editmanage(Article &head){int choice;Line *p=head;char cc;int num;char s[100],s1[100],s2[100];do{editmenu();if(m!=1)printf("\t\t请输入您的选择(若要返回上层菜单,请按0):");elseprintf("\t\tPlease input your choice(return to the above menu,please press 0):");scanf("%d",&choice);getchar();//在这里读入得好好处理一下,因为读入整型后就要读入一个字符型。
数据结构课程设计代码
#include<iostream.h>#include<stdio.h>#include<malloc.h>#define MAX 25typedef struct{char data;int weight;int parent;int lchild;int rchild;} HTNode;typedef struct{char cd[MAX];int start;} HuffmanCode;int main(){HTNode ht[2*MAX];HuffmanCode hcd[MAX], d;int i, k, f, l, r, n, c, s1, s2;cout<<"\t哈夫曼编码与译码系统\n";cout<<"\n请输入哈夫曼码元素个数:";cin>>n;cout<<"请输入各个元素的结点值与权值:\n";for(i=1;i<=n;i++){cout<<" 第"<<i<<"个元素-->\n\t结点值:";cin>>&ht[i].data;cout<<"\t权值:";cin>>ht[i].weight;}for(i=1;i<=2*n-1;i++)ht[i].parent=ht[i].lchild=ht[i].rchild=0;for(i=n+1;i<=2*n-1;i++){s1=s2=32767;l=r=0;for(k=1;k<=i-1;k++)if(ht[k].parent==0)if(ht[k].weight<s1){s2=s1;r=l;s1=ht[k].weight;l=k;}else if(ht[k].weight<s2){s2=ht[k].weight;r=k;}ht[l].parent=i;ht[r].parent=i;//得到新结点,删除l.r,将l,r的双亲域由0改为iht[i].weight=ht[l].weight+ht[r].weight;//i的权值等于左右孩子之和ht[i].lchild=l; ht[i].rchild=r; //l,r为i的左右孩子}for(i=1;i<=n;i++){d.start=n+1;//start开始时指向最后,即编码结束符位置c=i;f=ht[i].parent;//f指向结点c的双亲结点while(f!=0)//从叶子结点开始向上回溯,知道根结点{if(ht[f].lchild==c) d.cd[--d.start]='0';//结点c是f的左孩子,则生成代码0elsed.cd[--d.start]='1'; //结点c是f的左孩子,则生成代码1c=f;f=ht[f].parent;//继续向上回溯}hcd[i]=d;//为第i个字符编码分配空间}cout<<"输出哈夫曼编码:\n";for(i=1;i<=n;i++){cout<<ht[i].data<<": ";for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];cout<<"\n";}l: cout<<"\n请选择编码/译码/退出系统: (B/Y/E): ";char hfm;cin>>hfm;if(hfm=='e')return 0;else{switch(hfm)case'b':{int q ;char bs;cout<<"\n哈夫曼编码\n";cout<<"请输入字符代码: "<<endl;for(q=0;bs!=10;q++){bs=getchar();for(i=1;i<=n;i++){if (bs==ht[i].data)for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];}}cout<<endl;} break;case'y':{char e;int t,u;t=2*n-1;cout<<"\n哈夫曼译码\n";cout<<"\n请输入哈夫曼码: "<<endl;for(u=0;e!=10;u++){if(ht[t].lchild!=0){e=getchar();if(e=='0')t=ht[t].lchild;elset=ht[t].rchild;}else{cout<<ht[t].data;t=2*n-1;}}cout<<endl;} break;goto l;}return 0; } //Huffman。
数据结构课程设计报告 (附有完整可运行出来的代码)
课程设计报告设计题目:公园导游图一、流程图二、程序代码#include<iostream>using namespace std;#include<stdio.h>typedef struct //定义图结构{int n; /* 图的顶点个数*/char v[100]; /* 顶点信息*/int e[100][100]; /* 边信息*/int shor; /* 最短路径信息*/}park;park *luru(park *x){int j,k;cout<<"请输入公园景点个数"<<endl;cin>>x->n;if(x->n<=0){cout<<"个数输入错误,请重新输入"<<endl;cin>>x->n;}cout<<"请输入景点名称,每个名称只允许一个字符代替"<<endl;for(j=0;j<x->n;j++)cin>>x->v[j];cout<<"请输入景点之间的路径长度,只允许整数型数值,无路径长度的输入0"<<endl;for(j=0;j<x->n;j++)for(k=0;k<x->n;k++){cout<<"请输入第"<<j+1<<"行"<<"第"<<k+1<<"列的路径长度"<<endl;cin>>x->e[j][k];}return x;}int search(park *x){char start,end,temp;int i=0,j=0,temp_1,temp1=10000;cout<<"请输入要查找的起始景点名称"<<endl;cin>>start;while(i<x->n && start!=x->v[i])i++;if(i==x->n){cout<<"没有找到该景点,按任意键返回"<<endl;return 0;}}cout<<"请输入要查找的终点景点名称"<<endl;cin>>end;while(j<x->n && end!=x->v[j]){j++;if(j==x->n){cout<<"没有找到该景点,按任意键返回"<<endl;return 0;}}x->shor=x->e[i][j];temp_1=x->e[i][j];for (int k=0;k<x->n;k++)//两个顶点最小权值判断{if (x->e[i][k]==0||x->e[k][j]==0 )continue;if(x->shor > x->e[i][k] + x->e[k][j]){x->shor = x->e[i][k] + x->e[k][j];temp=x->v[k];}}if(x->shor==0){cout<<"这两个节点中没有连通路,按任意键返回"<<endl;return 0;}if(x->shor==temp_1){cout<<"最短路径信息: "<<start<<"->"<<end<<endl<<"最小路径长度:"<<x->shor<<endl;x->shor=10000;getchar();return 1;if(x->shor<temp_1 && x->shor<=temp1){cout<<"最短路径信息: "<<start<<"->"<<temp<<"->"<<end<<endl<<"最小路径长度:"<<x->shor<<endl;x->shor=10000;getchar();return 1;}cout<<"查找失败,按任意键返回"<<endl;getchar();return 0;}int main(){park x;int i=1;luru(&x);do{search(&x);cout<<"是否继续?"<<endl<<"1.继续"<<endl<<"0.退出"<<endl;cin>>i;}while(i!=0);return 0;}三、运行结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:文章编辑问题起止时间:2013年6 月24 日至2013年7 月12 日问题描述静态存储一页文章,每行最多不超过80个字符,共N行,程序可以统计出文字、数字、空格的个数,并且可以对文章中特定内容进行查找及替换,同时也可以删除指定内容。
基本要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)查找出文章中某一段文字,并用其他文字进行替换;(4)删除某一子串,并将后面的字符前移。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";(3)查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果;(4)输出删除某一字符串后的文章;实现提示存储结构使用线性表,分别用几个子函数实现相应的功能,并且使用菜单的形式,可以选择所要进行的操作(查找、替换、删除、统计等)。
文章编辑系统1概要设计本次课程设计的题目是文章编辑系统,本系统的功能描述如下:用户新建文本、浏览新建文本、文本字符统计、指定字符串统计、指定字符串删除、指定字符串替换等操作。
1.新建文本2.浏览输入文本3.文本字符统计4.指定字符串统计5.指定字符串删除6.指定字符串替换7.退出系统本系统包含七个功能模块,分别为:新建文本模块,浏览输入文本模块,指定字符串统计模块,指定字符串删除模块,指定字符串删除模块,指定字符串替换模块以退出系统模块。
新建文本模块实现用户录入文本信息,并且系统自动保存录入信息。
浏览输入文本模块实现了显示用户录入信息的功能。
指定字符串统模块实现了对英文字母数和空格数及整篇文章总字数的统计。
指定字符串统计实现了统计用户自定义字符串个数的功能。
指定字符串删除模块实现了对用户自定义字符串的删除。
指定字符串替换模块实现了替换用户自定义字符串为用户定义的新字符功能。
退出系统模块实现了退出系统功能。
图1.1 系统功能模块图2详细设计这部分详细介绍了系统中主要部分的功能实现,以及代码功能说明。
void Create(LINE * &head){printf ("请输入一页文章,以Ctrl+E为结尾(每行最多输入80字符!):\n"); //以Ctrl+E结束文本录入,避免发生混淆LINE *p=new LINE; /*首先为链表建立一个附加表头结点*/ head=p; /*将p付给表头指针*/char ch[100];while(1){gets(ch); /*输入字符串!*/if(strlen(ch)>80){printf("每行最多输入80字符");break;}if(ch[0]==5)break; /*如果发现输入 ^E,则退出输入*/ p=p->next=new LINE;p->data=new char[strlen(ch)+1]; /*为结点分配空间 */ strcpy(p->data,ch);if(ch[strlen(ch)-1]==5) /*除去最后一个控制符 ^E */{p->data[strlen(ch)-1]='\0';break;}}p->next=NULL; /*最后的一个指针为空 */head=head->next;}/**文本字数统计**/int Count_Space(LINE* &head)//统计空格数{LINE *p=head;int asc_space=32;int count=0;int i;int Len;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]==asc_space)count++;}while((p=p->next)!=NULL);return count;}int Count_Num(LINE * &head)//统计数字个数{LINE *p=head;int count=0;int Len;int i;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>=48 && p->data[i]<=57)count++;}while((p=p->next)!=NULL);return count;}int Count_All_Word(LINE * &head)//统计文章的总字数{LINE *p=head;int count=0;do{count+=strlen(p->data);}while((p=p->next)!=NULL);return count;}int Count_Letter(LINE * &head)//统计字母数{LINE *p=head;int count=0;int Len;int i;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>='a' && p->data[i]<='z'||p->data[i]>='A' && p->data[i]<='Z')count++; //计算字母个数}while((p=p->next)!=NULL);return count;}int Find_Word(LINE * &head,char *sch)//统计 sch 在文章中出现的次数{LINE *p=head;int count=0;int len1=0;int len2=strlen(sch);int i,j,k;do{len1=strlen(p->data);//当前行的字符数for(i=0;i<len1;i++){if(p->data[i]==sch[0]){k=0;for(j=0;j<=len2-1;j++)if(p->data[i+j]==sch[j])k=k+1;if(k==len2) {count++;i=i+k-1;}}}}while((p=p->next)!=NULL);return count;}/**特定字符串的删除**/void del_string_word(char *s,char *sch){char *p=strstr(s,sch);char tmp[80];int len=strlen(s);int k,kk;int i=len-strlen(p);int j=i+strlen(sch);int count=0;for(k=0;k<i;k++)tmp[count++]=s[k];for(kk=j;kk<len;kk++)tmp[count++]=s[kk];tmp[count]='\0';strcpy(s,tmp);}void Del_String(LINE * &head,char *sch)//删除指定的字符串{LINE *p=head;do{while(strstr(p->data,sch)!=NULL)del_string_word(p->data,sch);}while((p=p->next)!=NULL);}/**特定字符串的替换**/void replace_string_word(char *s,char *sch,char *reh) {int StringLen;char caNewString[100];char *FindPos = strstr(s, sch);// if((!FindPos) || (!sch))// return -1;while(FindPos){memset(caNewString, 0, sizeof(caNewString));StringLen = FindPos - s;strncpy(caNewString, s, StringLen);strcat(caNewString, reh);strcat(caNewString, FindPos + strlen(sch));strcpy(s, caNewString);FindPos = strstr(s, sch);}/* return 0; */}void Replace_String(LINE * &head,char *sch,char *reh)//替换指定的字符串{LINE *p=head;do{while(strstr(p->data,sch)!=NULL)replace_string_word(p->data,sch,reh);}while((p=p->next)!=NULL);}/**打印输入的文本**/void OutPutTxt(LINE * &head)//向屏幕输出文章{LINE *p=head;printf("文本文件输出如下:");do{printf("%s\n",p->data);}while((p=p->next)!=NULL);}void Count(LINE * &head){printf("文章统计信息结果:\n");printf("全部字母数:%d\n",Count_Letter(head));printf("数字个数:%d\n",Count_Num(head));printf("空格个数: %d \n",Count_Space(head));printf("文章总字数: %d\n",(Count_All_Word(head)+Count_Num(head)+Count_Space(head)+Co unt_Letter(head))/2);printf("\n");}void main(){LINE *head;char sch[20];char reh[20];char ID[10];char ch;char tmp_sch[20];char tmp_rch[20];3调试报告在本次程序设计中,在编译过程中,出现了几次问题(1)错误提示:error C2660: 'search' : function does not take 1 parameters错误类型: Search函数参数错误改正方法:将case语句后加break语句进行返回。