数据结构课程设计数据结构课程设计 字符串操作
数据结构课程设计 时间: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);
}
今天有网友提到自己在Linux服务器中安装VNC桌面的时候安装都没有问题,但是在登录远程的时候居然有出现灰色界面,有三行代码提示"Accept clipboard from viewers,Send clipboard to viewers,Send primary selection to viewers"。即便我们重新登录也不行,这个到底如何解决呢?这里找几个可以解决的可能办法,我们多多尝试。...
星梦云怎么样?星梦云好不好,资质齐全,IDC/ISP均有,从星梦云这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,星梦云专注四川高防服务器,成都服务器,雅安服务器 。官方网站:点击访问星梦云官网活动方案:1、成都电信年中活动机(封锁UDP,不可解封):机房CPU内存硬盘带宽IP防护流量原价活动价开通方式成都电信优化线路4vCPU4G40G+50...
青果网络QG.NET定位为高效多云管理服务商,已拥有工信部颁发的全网云计算/CDN/IDC/ISP/IP-VPN等多项资质,是CNNIC/APNIC联盟的成员之一,2019年荣获国家高薪技术企业、福建省省级高新技术企业双项荣誉。那么青果网络作为国内主流的IDC厂商之一,那么其旗下美国洛杉矶CN2 GIA线路云服务器到底怎么样?官方网站:https://www.qg.net/CPU内存系统盘流量宽带...
数据结构课程设计为你推荐
江西省教育云平台进入江西教育资源公共服务平台手机可不可以登录红杉树视频会议全时视频会议怎么样?openstack安装部署如何能更友好的在openstack平台里部署windows实例drs系统什么叫做SCM系统?产品涨价通知提价通知怎么写科达视频会议系统科达、中兴、华三、华为这几个视频会议哪个最好?充电宝摄像机我有一个大功率充电宝,只买一个无线摄像头行吗天津职业大学地址天津各大学地址华为会议终端华为终端视屏会议可以同时输出三路视频信号吗香港大陆请问为什么在香港说大陆叫内地,
海外域名注册 美国主机评测 国外php主机 mach5 国内永久免费云服务器 香港cdn lamp配置 天互数据 网站cdn加速 域名评估 免费申请网站 重庆双线服务器托管 支付宝扫码领红包 qq金券 114dns 阵亡将士纪念日 架设代理服务器 cdn加速技术 alexa世界排名 标准机柜 更多