⑴ 设计一个有序顺序表 数据结构(java)
package array;
class OrderArray{
private long[] a;
private int nElems;
public OrderArray(int maxSize){
a = new long[maxSize];
nElems = 0;
}
public void insert(long value){
int pos = 0;
for(pos=0;pos<nElems;pos++){
if(a[pos]>value){
break;
}
}
for(int i=nElems;i>pos;i--){
a[i] = a[i-1];
}
a[pos] = value;
nElems++;
}
public boolean delete(long value){
int pos = find(value);
if(pos!=-1){
for(int i=pos;i<nElems;i++){
a[i] = a[i+1];
}
nElems --;
return true;
}
return false;
}
public int find(long keySearch){
int lowerBound = 0;
int upperBound = nElems-1;
int curIn = 0;
while(true){
curIn = (lowerBound+upperBound)/2;
if(a[curIn]==keySearch){
return curIn;
}else if(lowerBound>upperBound){
return -1;
}else{
if(a[curIn]>keySearch){
upperBound = curIn -1;
}else{
lowerBound = curIn +1;
}
}
}
}
public void display(){
for(int i=0;i<nElems;i++){
System.out.println(a[i]);
}
}
}
public class OrderArrayApp {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int maxSize = 100;
OrderArray orderArray = new OrderArray(maxSize);
orderArray.insert(1);
orderArray.insert(7);
orderArray.insert(9);
orderArray.insert(8);
orderArray.insert(6);
orderArray.insert(4);
orderArray.display();
orderArray.delete(8);
orderArray.display();
}
}
⑵ 用C语言编写一个通讯录系统,集合数据结构双向链表知识
//类似//#include "stdafx.h"
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
class stu
{
char name[20];
double age,homephone,telphone;
char sex;
public:
stu(){}
stu(char n[20],char se,double ag,double ho,double te)
{
strcpy(name, n);
age=ag;
homephone=ho;
telphone=te;
}
friend void main();
}; void main()
{
cout<<"请选择您需要的操作!"<<endl;
cout<<"操作:"<<endl;
cout<<"(0)通讯录录入"<<endl;
cout<<"(1)增加人员"<<endl;
cout<<"(2)删除人员"<<endl;
cout<<"(3)修改数据"<<endl;
cout<<"(4)显示记录"<<endl;
cout<<"(5)退出"<<endl;
cout<<"选择相关操作请输入相对的括号里的阿拉伯数字!"<<endl;
stu *s[50];
int i=0;
int j=0;
bool flag2=0;
char p;
do
{
cin>>p;
if((p>='0'&&p<='5'))
flag2=1;
else
cout<<"指令错误!请重新输入:"<<endl;
}while(flag2==0); switch(p)
{ case '0': //(0)通讯录录入
{
char name[20];
double age,homephone,telphone;
char sex,c;
do{ cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请输入性别:"<<endl;
cin>>sex;
cout<<"请输入年龄:"<<endl;
cin>>age;
cout<<"请输入家里的电话号码:"<<endl;
cin>>homephone;
cout<<"请输入移动电话号码:"<<endl;
cin>>telphone;
j++;
s[i]=new stu(name, sex, age, homephone , telphone);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
flag2=0;
do
{
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
break; }
////////////////////////////////////////////////////////////////////
case '1': //(1)增加人员(Add)
{
char name[20];
double age,homephone,telphone;
char sex,c;
do{ cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请输入性别:"<<endl;
cin>>sex;
cout<<"请输入年龄:"<<endl;
cin>>age;
cout<<"请输入家里的电话号码:"<<endl;
cin>>homephone;
cout<<"请输入移动电话号码:"<<endl;
cin>>telphone;
j++;
s[i]=new stu(name, sex, age, homephone , telphone);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
flag2=0;
do
{
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
break; } case '2': //(2)删除人员(Delete)
{
char name[20];bool flag3=0;char c;
do{
cout<<"请输入您要删除的学生姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag3=1;
i--;
do{
s[h]=s[h+1];
h++;
}while(h<=i);
}
}
if(flag3==0)
cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!";
cout<<"要继续删除吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break; }
case '3': //(3)修改数据(Alter)
{
char name[20],se;double ag,ho,te;flag2=0;
char c;
do
{
cout<<"请输入您要修改的学生的姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"请输入性别:"<<endl;
cin>>se;
cout<<"请输入年龄:"<<endl;
cin>>ag;
cout<<"请输入家里的电话号码:"<<endl;
cin>>ho;
cout<<"请输入移动电话号码:"<<endl;
cin>>te;
s[h]->sex=se;
s[h]->age=ag;
s[h]->homephone=ho;
s[h]->telphone=te;
cout<<"数据修改成功!";
}
}
if(flag2==0)
{
cout<<"您要修改的学生本来就不存在!请检查重新输入!"<<endl;
}
cout<<"想继续修改吗(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break; }
case '4': //(4)显示记录(List)
{
cout<<"本系统所有通讯录的数据如下:"<<endl;
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<
"性别:"<<" "<<s[k]->sex<<"年龄:"<<" "<<s[k]->age
<<"家里的电话号码:"<<" "<<s[k]->homephone<<"移动电话号码:"
<<" "<<s[k]->telphone<<endl;
}
break; } }
cout<<"您想继续进行其他操作吗?(y/n)"<<endl;
bool flag4=0;
do
{
cin>>p;
if(p!='y'&&p!='n')
cout<<"指令错误!请重新输入!"<<endl;
else
flag4=1;
}while(flag4==0); if(p=='y')
cout<<"请输入操作代码(0 通讯录录入\n1 增加人员(Add)\n2 删除人员(Delete)\n3 修改数据(Alter)\n4 显示记录(List)\n 5 退出(Exit))"<<endl;
cin>>p;
for(int x=0;x<i;x++)
{
delete s[x];
cout<<"删除所有成员!"<<endl;
} }
⑶ 图书管理系统采用链表数据结构实现。
确信是用链表而不是关系数据库(及SQL)来实现?
这可以做一个毕业设计项目了。
⑷ 数据结构设计思路
这个很好办啊,你可以在加个存放店名的表啊,店名表里面有一个主键和各个店的店名,在你的原表上加一项“商品所在店”字段。把店名表的主键放到这个字段里面。以后你只要修改这个字段的内容就好了。哪怕你移动了n家店。也不存在任何问题啊。
我的意思就是你用个表结合就好。
select 主键
form 店名表
where 商品所在店=要移动的店名
搜索出来的数据放到你第一张表加的“商品所在店”字段
就好了。哪怕你移动一万家店也不会有问题啊,只要你在店名表里面加店名就好了。明白了吗。
⑸ 要命的数据结构课程设计题目啊!!!
//图的遍历
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
int const MAXQSIZE=20;
int const MAX_VERTEX_NUM=20;
int const ERROR=-1;
int const OK=1;
typedef char VexType;
typedef struct ArcNode
{
int adjvex; //该弧所指向的顶点的位置
struct ArcNode *nextarc; //指向下一个弧的指针
int weight; //权值
}ArcNode;
typedef struct VNode
{
VexType data; //顶点信息
ArcNode *firstarc; //指向第一个依附顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct ALGraph
{
AdjList vertices;
int vexnum,arcnum; //图的当前顶点数和弧数
int kind; //图的种类标志
}ALGraph;
int InitALGraph(ALGraph &G); //建造一个空图
int LocateVex(ALGraph G,VexType v); //找到图中节点v中的位置
int Build_AdjList(ALGraph &G); //输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表
int InitALGraph(ALGraph &G) //建造一个空的图
{
G.arcnum=G.vexnum=0;
for(int i=0;i<MAX_VERTEX_NUM;i++)
{
G.vertices[i].data=0;
G.vertices[i].firstarc=NULL;
}
return 0;
}
int LocateVex(ALGraph G,VexType v) //找到G中v定点在图中的位置
{
for(int i=0;i<MAX_VERTEX_NUM;i++)
{
if(G.vertices[i].data==v)
return i;
}
return -1;
}
int Build_AdjList(ALGraph &G) //输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表
{
InitALGraph(G);
int v,a,m,i,j; //v表示有向图的定点数,a表示边数;
char t,h,ch; //t代表弧头,h代表弧尾
ArcNode *p,*q;
cout<<"输入节点数:";
cin>>v;
if(v<0) return ERROR; //顶点数不能为负
G.vexnum=v;
cout<<"输入边数:";
cin>>a;
if(a<0) return ERROR; //边数不能为负
G.arcnum=a;
cout<<"输入各个定点:";
for(m=0;m<v;m++)
{
cin>>ch;
G.vertices[m].data=ch; //输入各顶点的符号
}
cout<<"输入各个边的弧头和弧尾:";
for(m=1;m<=a;m++)
{
cin>>t;cin>>h; //t为弧尾,h为弧头
if((i=LocateVex(G,t))<0) return ERROR;
if((j=LocateVex(G,h))<0) return ERROR; //顶点未找到
p=(ArcNode*)malloc(sizeof(ArcNode)); //创建新的节点,并将其赋值
p->adjvex=j;
p->nextarc=NULL;
if(!G.vertices[i].firstarc) //创建链表
G.vertices[i].firstarc=p;
else
{
for(q=G.vertices[i].firstarc;q->nextarc;q=q->nextarc);
q->nextarc=p;
}
}//while
return OK;
}//Build_AdjList
bool Visited[MAX_VERTEX_NUM]; //访问标志数组
int FirstAdjVex(ALGraph G,int v) //返回第一个邻接顶点
{
if(G.vertices[v].firstarc)
return G.vertices[v].firstarc->adjvex;
else return ERROR;
}
int NextAdjVex(ALGraph G,int v,int w) //返回W后的邻接顶点
{
ArcNode *q;
for(q=G.vertices[v].firstarc;q->nextarc;q=q->nextarc)
if(q->adjvex==w)
return q->nextarc->adjvex;
return ERROR;
}
void DFS(ALGraph G,int v) //DFS算法,深度优先搜索
{
int w;
Visited[v]=true;
cout<<G.vertices[v].data;
for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
if(!Visited[w])
DFS(G,w);
}
void DFSTraverse(ALGraph G) //深度优先搜索图G
{
int v;
for(v=0;v<G.vexnum;++v)
Visited[v]=false;
for(v=0;v<G.vexnum;++v)
if(!Visited[v])
DFS(G,v);
}
typedef struct
{
int *base; //初始化动态分配存储空间
int front; //头指针,若队列不空,只想队列头元素
int rear; //尾指针,若队列不空,只想队列尾元素的下一个位置
}SqQueue;
int InitQueue(SqQueue &Q)
{
//构造一个空队列
Q.base=(int *)malloc(MAXQSIZE*sizeof(int));
if(!Q.base)exit(-1);
Q.front=Q.rear=0;
return OK;
}
int QueueLenth(SqQueue Q)
{
//返回Q的元素个数。即队列的长度
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
int EnQueue(SqQueue &Q,int e)
{
//插入元素e为Q的新的队尾元素
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;//队列已满
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
int DeQueue(SqQueue &Q,int &e)
{
//若队列不空,则删除Q的对头元素。用e返回其值。
//否则返回ERROR
if(Q.front==Q.rear)return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
int Empty(SqQueue Q)
{
//判断是否为空
return Q.rear-Q.front;
}
void BFSTraverse(ALGraph G)
{
//广度优先遍历
int w,v,u;
for(v=0;v<G.vexnum;v++)
Visited[v]=false;
SqQueue Q;
InitQueue(Q);
for(v=0;v<G.vexnum;v++)
{
if(Visited[v]==false)
{
EnQueue(Q,v);
Visited[v]=true;
cout<<G.vertices[v].data;
while(Empty(Q))
{
DeQueue(Q,u);
for(w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w))
{
if(!Visited[w])
{
Visited[w]=true;
cout<<G.vertices[w].data;
EnQueue(Q,w);
}
}
}
}
}
}
int main()
{
ALGraph G;
Build_AdjList(G);
cout<<"深度优先遍历:"<<endl;
DFSTraverse(G);
cout<<"广度优先遍历:"<<endl;
BFSTraverse(G);
return OK;
}
⑹ 概要说明书里面的 数据结构与程序的关系 怎么写
只有模板,看能不能用
概要设计说明书
1引言
1.1编写目的
说明编写这份概要设计说明书的目的,指出预期的读者。
1.2背景
说明:
a. 待开发软件系统的名称;
b. 列出此项目的任务提出者、开发者、用户以及将运行该软件的计算站(中心)。
1.3定义
列出本文件中用到的专门术语的定义和外文首字母组词的原词组。
1.4参考资料
列出有关的参考文件,如:
a. 本项目的经核准的计划任务书或合同,上级机关的批文;
b. 属于本项目的其他已发表文件;
c. 本文件中各处引用的文件、资料,包括所要用到的软件开发标准。列出这些文件的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。
2总体设计
2.1需求规定
说明对本系统的主要的输入输出项目、处理的功能性能要求,详细的说明可参见附录C。
2.2运行环境
简要地说明对本系统的运行环境(包括硬件环境和支持环境)的规定,详细说明参见附录C。
2.3基本设计概念和处理流程
说明本系统的基本设计概念和处理流程,尽量使用图表的形式。
2.4结构
用一览表及框图的形式说明本系统的系统元素(各层模块、子程序、公用程序等)的划分,扼要说明每个系统元素的标识符和功能,分层次地给出各元素之间的控制与被控制关系.
2.5功能器求与程序的关系
本条用一张如下的矩阵图说明各项功能需求的实现同各块程序的分配关系:
程序1 程序2 …… 程序n
功能需求1 √
功能需求2 √
……
功能需求n √ √
2.6人工处理过程
说明在本软件系统的工作过程中不得不包含的人工处理过程(如果有的话)。
2.7尚未问决的问题
说明在概要设计过程中尚未解决而设计者认为在系统完成之前必须解决的各个问题。
3接口设计
3.1用户接口
说明将向用户提供的命令和它们的语法结构,以及软件的回答信息。
3.2外部接口
说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持软件之间的接口关系。
3.3内部接口
说明本系统之内的各个系统元素之间的接口的安排。
4运行设计
4.1运行模块组合
说明对系统施加不同的外界运行控制时所引起的各种不同的运行模块组合,说明每种运行所历经的内部模块和支持软件。
4.2运行控制
说明每一种外界的运行控制的方式方法和操作步骤。
4.3运行时间
说明每种运行模块组合将占用各种资源的时间。
5系统数据结构设计
5.1逻辑结构设计要点
给出本系统内所使用的每个数据结构的名称、标识符以及它们之中每个数据项、记录、文卷和系的标识、定义、长度及它们之间的层次的或表格的相互关系。
5.2物理结构设计要点
给出本系统内所使用的每个数据结构中的每个数据项的存储要求,访问方法、存取单位、存取的物理关系(索引、设备、存储区域)、设计考虑和保密条件。
5.3数据结构与程序的关系
说明各个数据结构与访问这些数据结构的形式:
6系统出错处理设计
6.1出错信息
用一览表的方式说朗每种可能的出错或故障情况出现时,系统输出信息的形式、含意及处理方法。
6.2补救措施
说明故障出现后可能采取的变通措施,包括:
a. 后备技术说明准备采用的后备技术,当原始系统数据万一丢失时启用的副本的建立和启动的技术,例如周期性地把磁盘信息记录到磁带上去就是对于磁盘媒体的一种后备技术;
b. 降效技术说明准备采用的后备技术,使用另一个效率稍低的系统或方法来求得所需结果的某些部分,例如一个自动系统的降效技术可以是手工操作和数据的人工记录;
c. 恢复及再启动技术说明将使用的恢复再启动技术,使软件从故障点恢复执行或使软件从头开始重新运行的方法。
6.3系统维护设计
说明为了系统维护的方便而在程序内部设计中作出的安排,包括在程序中专门安排用于系统的检查与维护的检测点和专用模块。 各个程序之间的对应关系,可采用如下的矩阵图的形式;
⑺ 如何才能选择一个好的数据结构进行程序设计
数据的逻辑结构、存储结构和操作(特别是基本操作)的实现这三者是密切相关的。一般地,在选择(或设计)数据结构时应该完成以下三步:
⑴ 确定表示问题所需的数据及其特性;
⑵ 确定必须支持的基本操作,并度量每种操作所受的时、空资源限制;
⑶ 选择(或设计)最接近这些开销的数据结构。
⑻ C语言课设数据结构设计及用法说明怎么写
数据结构设计及用法说明就是给出你所设计的数据结构以及怎么使用。
你要给出数据结构的定义:包含是类型,注释等信息。例如
struct
student{
string
name;//学生姓名
int
age;//学生年龄
int
grade;//学生所在年级
int
class;//学生所在班级
}
然后如果是函数的话,就给出参数的含义,以及这个函数实现的功能,例如
int
sum(int
a,int
b)//返回值int型,对参数a和参数b进行求和运算
{
......
}
简单的说就是为了使你写的东西让其他人也能使用,能理解你的思想。
⑼ 数据结构-课程设计:二叉排序树的实现
晕了,真是好纠结,我在写完下面的代码后,才在网上找了找,居然发现和你的题目完全一样的代码,算了,我就直接发在网上找到的文档和代码给你吧,可怜我写了这么久代码呀。。。。。已发,请注意查收。
代码写好了。
VC下经测试通过。
不过如果你还要论文之类的或者设计文档,我也比较难帮到你了。
#include <iostream>
using namespace std;
class node
{
public:
node(int i):data(i),left(NULL),right(NULL){}
void inorder(node *&root) //中序遍历,符合升序输出
{
if(root!=NULL)
{
inorder(root->left);
cout<<root->data<<' ';
inorder(root->right);
}
}
void insert(node *&ptr,int item) //在查找树中插入元素
{
if(ptr==NULL)
ptr=new node(item);
else if(item<ptr->data)
insert(ptr->left,item);
else insert(ptr->right,item);
}
node *find(node *&ptr,int item) //在查找树中查找元素,找到返回所在结点指针,找不到返回空指针。
{
if(ptr==NULL)
return NULL;
if(ptr->data==item)
return ptr;
else if(item<ptr->data)
find(ptr->left,item);
else find(ptr->right,item);
}
node *&findy(node *&ptr,int item) //在查找树中查找肯定存在的元素,并返回其引用
{
if(ptr->data==item)
return ptr;
else if(item<ptr->data)
findy(ptr->left,item);
else findy(ptr->right,item);
}
node* rl(){return left;}
node* rr(){return right;}
void dele(node *&ptr) //删除值为item所在结点
{
if(ptr->rl()==NULL&&ptr->rr()==NULL)
ptr=NULL;
else if(ptr->rr()==NULL)
ptr=ptr->rl();
else
ptr=ptr->rr();
}
private:
int data;
node *left; //左孩子结点
node *right; //右孩子结点
};
int main()
{
int t,i=0,j;
cout<<"输入数字个数(结点个数):";
cin>>t;
cout<<"输入"<<t<<"个数字,数字之间用空格隔开:";
cin>>j;
node *x=new node(j);
for(;i<t-1;i++)
{
cin>>j;
x->insert(x,j);
}
cout<<"中序遍历为:";
x->inorder(x); //作中序遍历
cout<<"\n输入操作(当输入-1时程序结束):"<<endl;
cin>>j;
while(j!=-1)
{
node *t=x->find(x,j); //定位结点
if(t!=NULL)
{
node *&y=x->findy(x,j);
x->dele(y);
cout<<"中序遍历为:";
x->inorder(x);
}
else cout<<"无"<<j;
cout<<"\n输入操作(当输入-1时程序结束):"<<endl;
cin>>j;
}
return 0;
}
附测试数据一组
8
22 33 1 50 88 99 77 55
33
50
51
55
-1
有什么不明的话可以M我或者留言我。
⑽ 数据结构课程设计 简单目录管理系统的设计与实现
给点劳务费呗。保质量完成。