数据结构课程设计数据结构课程设计 字符串操作

数据结构课程设计  时间:2021-09-23  阅读:()

数据结构课程设计题目求解编写一个通讯录管理系统

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> struct contacks { char name[10]; char street[20]; char city[10]; int eip; char state[10]; }con[50]; int k=0; void enter(); void display(); void lookandchange(); void del(); void save(); void main() { int a; do { printf(" ****************************************************************** "); printf(" *"); printf(" e enter the contacks system"); printf(" *"); printf(" ****************************************************************** "); printf(" *"); printf(" ess information"); printf(" * "); printf(" *"); printf(" 2.display information"); printf(" * "); printf(" *"); printf(" 3.lookandchange information"); printf(" * "); printf(" *"); printf(" 4.Delete information"); printf(" * "); printf(" *"); printf(" 5.Save the information"); printf(" * "); printf(" *"); printf(" 6. exit "); printf(" * "); printf(" ****************************************************************** "); printf(" Enter you choice : "); scanf("%d",&a); switch(a) { case 1:printf(" ");enter();break; case 2:printf(" ");display();break; case 3:printf(" ");lookandchange();break; case 4:printf(" ");del();break; case 5:printf(" ");save();break; case 6:printf(" ");exit(0);break; default:printf(" The choice is between 1 to 6. "); } }while(a!=0); } void enter() { char ch[20]; printf(" enter student information: "); do { printf(" name: "); scanf("%s",con[k].name); printf("street: "); scanf("%s",con[k].street); printf(" city: "); scanf("%s",con[k].city); printf(" eip: "); scanf("%d",&con[k].eip); printf(" state: "); scanf("%s",con[k].state); k++; printf(" if want continue input student information(y/n): "); scanf("%s",ch); }while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0); display(); } void display() { int i; printf(" the information is: "); for(i=0;i<k;i++) { printf("%10s %20s %10s %6d %10s ",con[i].name,con[i].street,con[i].city,con[i].eip,con[i].state); printf(" "); } } void lookandchange() { int i; char a[20],ch[10]; printf(" enter you want look name:"); scanf("%s",a); for(i=0;i<k;i++) if(strcmp(con[i].name,a)==0) printf("%10s %20s %10s %6d %10s ",con[i].name,con[i].street,con[i].city,con[i].eip,con[i].state); printf(" enter you want change name:"); scanf("%s",a); for(i=0;i<k;i++) { if(strcmp(con[i].name,a)==0) { printf(" you sure want change student name(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf(" name:"); scanf("%s",con[i].name);} printf(" you sure want change street(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf(" street"); scanf("%s",con[i].street);} printf(" you sure want change city(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf(" city"); scanf("%s",con[i].city);} printf(" you sure want change eip(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf(" eip"); scanf("%d",&con[i].eip);} printf(" you sure want change state(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf(" state"); scanf("%s",con[i].state);} } } display(); } void del() { int i,j; char c[20]; printf(" enter you want delete name : "); printf("name:"); scanf("%s",&c); for(i=0;i<k;i++) if(strcmp(c,con[i].name)==0) break; for(j=i;j<=2;j++) con[j]=con[j+1]; printf(" you had delete %s ",c); k--; display(); } void save() { FILE *fp; int i; if((fp=fopen("xinxi.txt","w"))==NULL) { printf("cannot write the file. "); exit(0);} for(i=0;strlen(con[i].name)!=0;i++) fprintf(fp,"%s %s %s %d %s ",con[i].name,con[i].street,con[i].city,con[i].eip,con[i].state); fclose(fp); }

数据结构 C语言版 课程设计 题目:约瑟夫环

O.O!啥叫课程设计格式~~~这个学期我倒是自己写过一个约瑟夫环的算法 #include<iostream.h> typedef struct Node { int data; struct Node *next; }*Pointer; Pointer p,q,s; Pointer Initlink(Pointer &head) { head=new Node; head->next=head; return(head); } void Creatlink(Pointer &head,int n) { p=head; if(n>=2) { for(int i=1;i<=n-1;i++) { p->data=i; s=new Node; p->next=s; p=s; } p->data=n; p->next=head; } else { p->data=1; p->next=head; } } int Length(Pointer &head) { int j=1; p=head; while(p->next!=head) { p=p->next; j++; } return(j); } Pointer Find(Pointer &head,int i) { p=head; if(i>1) { for(int t=1;t<=i-1;t++) { p=p->next; } } else { p=head; } return p; } void Delete(Pointer &head,int m) { if(m>1) { p=Find(head,m-1); q=p->next; p->next=p->next->next; delete(q); } else { p=Find(head,Length(head)); p->next=p->next->next; } } void main() { int n,m; Pointer head,s; Initlink(head); s=head; cout<<"请输入数据总量n:"<<endl; cin>>n; Creatlink(head,n); cout<<"请输入循环次数m:"<<endl; cin>>m; cout<<"输出为:"; for(int temp=0;temp<n;temp++) { cout<<Find(head,m)->data<<" "; s=head; head=Find(head,m+1); Delete(s,m); } } 这个程序的思想很简单大体内容分两块:1.建立一个长度为n的循环链表设。

n=8,并将链表的数据域分别设置为1,2,3,4,5,6,7,8。

这就是约瑟夫环的大体框架。

2.从1开始每经过m个数据便删除该数据并将其输出。

设m=4,则第一个输出的数字是4,第二个数字是8,第三个数字是5(由于链表是循环的),然后依次输出下去直到全部输出为止。

这就是对链表所需要进行的操作。

也就最终完成了约瑟夫环~ 因此为了达到以上目的,你需要一个建立链表的函数及源代码中的 Creatlink(Pointer &head,int n),还需要一个循环删除的函数及void Delete(Pointer &head,int m),而完成了这样的操作还是不行,因为有一些细节还需要处理,因为这个删除操作是循环进行的,所以你需要在删除一个数据以后从下一个数据从新开始经过m再删除,而不是重新从头结点开始删除,所以你需要一个查找函数Find(Pointer &head,int i),这个函数的作用是查找链表中的第i个节点。

这样我们的函数就最终完成了~~~~ 以上只不过是我的一点心得,当然算不上什么课程设计格式,只是希望可以让楼主学到些东西而已~

数据结构课程设计

#include <iostream> using namespace std; template<class T> class CSequenceList { public: CSequenceList(int size); ~CSequenceList(void); //判断线性表是否为空 bool IsEmpty()const; //返回线性表的长度 int Length()const; //得到第i元素的值 bool Get(int i, T& x)const; //找到跟x相等的下标,失败返回-1 int Find(const T x)const; //在第i个数据之后插入x,若i=-1,那么在表头之前插入 bool Insert(int i, T x); //删除第i个数据 bool Delete(int i); //更新数据 bool Update(int i,T x); //输出表 void Output(ostream& out)const; //排序,从小到大排序 void sort(); private: int m_number; int maxLength; T* mElements; }; template<class T> CSequenceList<T>::CSequenceList(int size) { maxLength=size; mElements=new T[maxLength]; m_number=0; } template<class T> CSequenceList<T>::~CSequenceList(void) { delete [] mElements; } template<class T> bool CSequenceList<T>::IsEmpty()const { return m_number==0; } template<class T> int CSequenceList<T>::Length()const { return m_number; } template<class T> bool CSequenceList<T>::Get(int i, T& x)const { if (i <0 || i>m_number-1) { cout<<"Get() is error!"<<endl; return false; } } template<class T> int CSequenceList<T>::Find(const T x)const { for (int i=0; i<m_number; i++) { if(x==mElements[i])return i; } return -1; } template<class T> bool CSequenceList<T>::Insert(int i, T x) { if (i<-1 || i>m_number-1 || m_number == maxLength) { cout<<"Insert() is Error!"; return false; } for (int j=m_number-1;j>i;j--) { mElements[j+1]=mElements[j]; } mElements[i+1]=x; m_number++; return true; } template<class T> bool CSequenceList<T>::Delete(int i) { if (i<0 || i>m_number-1 || m_number==0) { cout<<"Delete() is Error!"; return false; } for (int j=i; j<m_number-1; j++) { mElements[j]=mElements[j+1]; } m_number--; return true; } template<class T> bool CSequenceList<T>::Update(int i,T x) { if (i<0 || i>m_number-1) { cout<<"Update() is Error!"; return false; } mElements[i]=x; return true; } template<class T> void CSequenceList<T>::Output(ostream& out)const { cout<<endl; for (int i=0; i<m_number; i++) { out<<mElements[i]<<" "; } out<<endl; } template<class T> void CSequenceList<T>::sort() { if (m_number == 0) { return; } for (int i=0;i<m_number-1;i++) { for (int j=i+1;j<m_number;j++) { if (mElements[i] > mElements[j]) { T temp=mElements[j]; mElements[j]=mElements[i]; mElements[i]=temp; } } } } int main() { CSequenceList<int> SL(20); for (int i=0;i<10;i++) { SL.Insert(i-1,i); } //初始化数据 cout<<"-----初始化数据-------"<<endl; SL.Output(cout); cout<<endl; //在第3个后面添加一个数据99 cout<<"-----在第3个后面添加一个数据99-------"<<endl; SL.Insert(2,99); SL.Output(cout); cout<<endl; //删除第8个数据 cout<<"-----删除第8个数据-------"<<endl; SL.Delete(7); SL.Output(cout); cout<<endl; //改掉第5个数据 cout<<"-----改掉第5个数据-------"<<endl; SL.Update(4,88); SL.Output(cout); cout<<endl; cout<<"-----最后排序-------"<<endl; SL.sort(); SL.Output(cout); cout<<endl; return 0; } 就用模版写了一下第一问,希望你能够用的上,看的懂。

数据结构课程设计题目,图的建立以及遍历。

//图的遍历算法程序 //图的遍历是指按某条搜索路径访问图中每个结点,使得每个结点均被访问一次,而且仅被访问一次。

图的遍历有深度遍历算法和广度遍历算法,程序如下: #include <iostream> //#include <malloc.h> #define INFINITY 32767 #define MAX_VEX 20 //最大顶点个数 #define QUEUE_SIZE (MAX_VEX+1) //队列长度 using namespace std; bool *visited; //访问标志数组 //图的邻接矩阵存储结构 typedef struct{ char *vexs; //顶点向量 int arcs[MAX_VEX][MAX_VEX]; //邻接矩阵 int vexnum,um; //图的当前顶点数和弧数 }Graph; //队列类 class Queue{ public: void InitQueue(){ base=(int *)malloc(QUEUE_SIZE*sizeof(int)); front=rear=0; } void EnQueue(int e){ base[rear]=e; rear=(rear+1)%QUEUE_SIZE; } void DeQueue(int &e){ e=base[front]; front=(front+1)%QUEUE_SIZE; } public: int *base; int front; int rear; }; //图G中查找元素c的位置 int Locate(Graph G,char c){ for(int i=0;i<G.vexnum;i++) if(G.vexs[i]==c) return i; return -1; } //创建无向网 void CreateUDN(Graph &G){ int i,j,w,s1,s2; char a,b,temp; printf("输入顶点数和弧数:"); scanf("%d%d",&G.vexnum,&um); temp=getchar(); //接收回车 G.vexs=(char *)malloc(G.vexnum*sizeof(char)); //分配顶点数目 printf("输入%d个顶点. ",G.vexnum); for(i=0;i<G.vexnum;i++){ //初始化顶点 printf("输入顶点%d:",i); scanf("%c",&G.vexs[i]); temp=getchar(); //接收回车 } for(i=0;i<G.vexnum;i++) //初始化邻接矩阵 for(j=0;j<G.vexnum;j++) G.arcs[i][j]=INFINITY; printf("输入%d条弧. ",um); for(i=0;i<um;i++){ //初始化弧 printf("输入弧%d:",i); scanf("%c %c %d",&a,&b,&w); //输入一条边依附的顶点和权值 temp=getchar(); //接收回车 s1=Locate(G,a); s2=Locate(G,b); G.arcs[s1][s2]=G.arcs[s2][s1]=w; } } //图G中顶点k的第一个邻接顶点 int FirstVex(Graph G,int k){ if(k>=0 && k<G.vexnum){ //k合理 for(int i=0;i<G.vexnum;i++) if(G.arcs[k][i]!=INFINITY) return i; } return -1; } //图G中顶点i的第j个邻接顶点的下一个邻接顶点 int NextVex(Graph G,int i,int j){ if(i>=0 && i<G.vexnum && j>=0 && j<G.vexnum){ //i,j合理 for(int k=j+1;k<G.vexnum;k++) if(G.arcs[i][k]!=INFINITY) return k; } return -1; } //深度优先遍历 void DFS(Graph G,int k){ int i; if(k==-1){ //第一次执行DFS时,k为-1 for(i=0;i<G.vexnum;i++) if(!visited[i]) DFS(G,i); //对尚未访问的顶点调用DFS } else{ visited[k]=true; printf("%c ",G.vexs[k]); //访问第k个顶点 for(i=FirstVex(G,k);i>=0;i=NextVex(G,k,i)) if(!visited[i]) DFS(G,i); //对k的尚未访问的邻接顶点i递归调用DFS } } //广度优先遍历 void BFS(Graph G){ int k; Queue Q; //辅助队列Q Q.InitQueue(); for(int i=0;i<G.vexnum;i++) if(!visited[i]){ //i尚未访问 visited[i]=true; printf("%c ",G.vexs[i]); Q.EnQueue(i); //i入列 while(Q.front!=Q.rear){ Q.DeQueue(k); //队头元素出列并置为k for(int w=FirstVex(G,k);w>=0;w=NextVex(G,k,w)) if(!visited[w]){ //w为k的尚未访问的邻接顶点 visited[w]=true; printf("%c ",G.vexs[w]); Q.EnQueue(w); } } } } //主函数 void main(){ int i; Graph G; CreateUDN(G); visited=(bool *)malloc(G.vexnum*sizeof(bool)); printf(" 广度优先遍历: "); for(i=0;i<G.vexnum;i++) visited[i]=false; DFS(G,-1); printf(" 深度优先遍历: "); for(i=0;i<G.vexnum;i++) visited[i]=false; BFS(G); printf(" 程序结束. "); } 输出结果为(红色为键盘输入的数据,权值都置为1): 输入顶点数和弧数:8 9 输入8个顶点. 输入顶点0:a 输入顶点1:b 输入顶点2:c 输入顶点3:d 输入顶点4:e 输入顶点5:f 输入顶点6:g 输入顶点7:h 输入9条弧. 输入弧0:a b 1 输入弧1:b d 1 输入弧2:b e 1 输入弧3:d h 1 输入弧4:e h 1 输入弧5:a c 1 输入弧6:c f 1 输入弧7:c g 1 输入弧8:f g 1 广度优先遍历: a b d h e c f g 深度优先遍历: a b c d e f g h 程序结束.

数据结构课程设计是什么

一个软件系统框架应建立在数据之上,而不是建立在操作之上。

一个含抽象数据类型的软件模块应包含定义、表示、实现三个部分。

对每一个数据结构而言,必定存在与它密切相关的一组操作。

若操作的种类和数目不同,即使逻辑结构相同,数据结构能起的作用也不同。

不同的数据结构其操作集不同,但下列操作必不可缺: 1. 结构的生成; 2. 结构的销毁; 3. 在结构中查找满足规定条件的数据元素; 4. 在结构中插入新的数据元素; 5. 删除结构中已经存在的数据元素; 6. 遍历。

抽象数据类型:一个数学模型以及定义在该模型上的一组操作。

抽象数据类型实际上就是对该数据结构的定义。

因为它定义了一个数据的逻辑结构以及在此结构上的一组算法。

抽象数据类型可用以下三元组表示:(D,S,P)。

D是数据对象,S是D上的关系集,P是对D的基本操作集。

ADT的定义为: ADT 抽象数据类型名{ 数据对象:(数据元素集合) 数据关系:(数据关系二元组结合) 基本操作:(操作函数的罗列) } ADT 抽象数据类型名; 抽象数据类型有两个重要特性: * 数据抽象 o 用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。

* 数据封装 o 将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。

数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构。

线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。

线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。

逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。

算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。

数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新的排序等。

数据结构的形式定义为:数据结构是一个二元组: Data-Structure=(D,S) 其中:D是数据元素的有限集,S是D上关系的有限集。

数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间的相互关系。

数据结构课程设计 字符串操作

创建数组 保存数据 我就不写了哈 (2)将字符串Srting2的头n个字符添加到String1的尾部。

输出结 string1.Insert(string.Length - 1, string2.Substring(0, n)) (3)查找串String3在串String1中的位置,若String3在String1中不存在。

则插入String3在String1中的m位置上。

输出结果。

if(string1.Contains(string3)) { string1.IndexOf(string3); } else { string1.insert(m,string3); }

CloudCone中国春节优惠活动限定指定注册时间年付VPS主机$13.5

CloudCone 商家产品还是比较有特点的,支持随时的删除机器按时间计费模式,类似什么熟悉的Vultr、Linode、DO等服务商,但是也有不足之处就在于机房太少。商家的活动也是经常有的,比如这次中国春节期间商家也是有提供活动,比如有限定指定时间段之前注册的用户可以享受年付优惠VPS主机,比如年付13.5美元。1、CloudCone新年礼物限定款仅限2019年注册优惠购买,活动开始时间:1月31...

趣米云月付460元,香港CN2云服务器VPS月付低至18元

趣米云早期为做技术起家,为3家IDC提供技术服务2年多,目前商家在售的服务有香港vps、香港独立服务器、香港站群服务器等,线路方面都是目前最优质的CN2,直连大陆,延时非常低,适合做站,目前商家正在做七月优惠活动,VPS低至18元,价格算是比较便宜的了。趣米云vps优惠套餐:KVM虚拟架构,香港沙田机房,线路采用三网(电信,联通,移动)回程电信cn2、cn2 gia优质网络,延迟低,速度快。自行封...

HaBangNet(6.95美元/月)美国vps 5TB流量/德国vps 香港双向CN2 GIA VPS

HaBangNet支持支付宝和微信支付,只是价格偏贵,之前国内用户并不多。这次HaBangNet推出三个特价套餐,其中美国机房和德国机房价格也还可以,但是香港机房虽然是双向CN2 GIA线路,但是还是贵的惊人,需要美国和德国机房的可以参考下。HaBangNet是一家成立于2014年的香港IDC商家,中文译名:哈邦网络公司,主营中国香港、新加坡、澳大利亚、荷兰、美国、德国机房的虚拟主机、vps、专用...

数据结构课程设计为你推荐
暴风播酷云暴风影音视频播放器 暴风影音万能播放器天津职业大学地址天津职业大学,怎么样,多少分能进去。cmnet设置CMNET怎么设置720云全景制作全景图如何制作的?fusioninsight什么是MAYA FUSION?怎么又跑出来一个DFusion?两者什么区别?安徽工业大学地址安徽工业大学有几个校区及校区地址 哪个校区最好匿名购买匿名购买什么意思??视频电话会议电视电话会议是什么意思啊?bypass是什么意思wanan是什么意思?智能系统封装工具智能一键封装工具注册码?
中国万网域名注册 服务器租用托管 免费国际域名 warez 华为云服务 edgecast 一点优惠网 91vps 免费活动 监控服务器 主机管理系统 东莞主机托管 工信部网站备案查询 服务器论坛 1美元 上海联通 cc攻击 stealthy 泥瓦工 qq空间申请关闭 更多