其中线性表内含顺序表和链表。顺序表较为简单,仅仅需要一个数组就可以完成,当然最好也要添加一个表示长度的数据成员,如size。而链表,显然比较多变看,小可不才,用了将近三天的时间才能明白,不能不说见笑于大方之家;皆因链表之中还有循环链表,双向链表,双向循环链表。好了,言归正传:循环链表的程序奉上:
链表,不过增(insert)删(delete)改(update)查(select)而已。在于Java程序中,还要加上构造(Java有垃圾回收机制,故没有析构,但可以手动回收)。先看代码如下:
1、关于构造函数,小生理解到:需要什么样的初始化,就写出什么样的构造函数,当然,没有时类也会人性化的构造一个空的构造函数;本人就节点有一个构造函数
2、在方法中,注意index的具体代表就行。其中,在找上一节点时,很多重复了,可以另外写入一个函数中。
3、最后只是一个测试形式的,可以自己设置
4、自认为一个比较简单的程序了
packagelink;
classNode {
publicintnum;
publicNodenext;
publicNode(intnum, Node next) {
thisnum= num;
thisnext= next;
}
}
publicclassCycleList {
publicNodehead;
publicintsize;
publicvoidinsertHead(intelement){//在头结点的地方插入 if(size== 0){
head=newNode(element,head);
}else{
Node no =head;
head=newNode(element, no);
}
size++;
}
publicvoidinsert(intindex,intelement) {//插入元素
if(size== 0) {
head=newNode(element,head);
}else{
if(index < 0) {
index = 0;
}
if(index >size) {
index =size;
}
Node no1 =head;
for(inti = 0; i < index - 1; i++) {
no1 = no1next;
}
Node no2 =newNode(element, no1next);
no1next= no2;
}
size++;
}
publicvoiddelete(intindex) { //删除函数
if(index < 0) {
index = 0;
}
if(index >size) {
index =size;
}
Node no3 =head;
for(inti = 0; i < index - 1; i++) {
no3 = no3next;
}
no3next= no3nextnext;
size--;
}
publicvoidselect() { //查询所有元素
intsizelong =size;
Node no4 =head;
for(inti = 0; i < sizelong; i++) {
Systemoutprint(no4num);
no4 = no4next;
}
}
publicvoidupdate(intindex,intelement){//更换index位置的内容
Node no7 =head;
for(inti=0; i<index-1; i++){
no7 = no7next;
}
no7num= element;
}
publicvoidsel(intindex){ //查询index位置的内容
Node no8 =head;
for(inti=0; i<index-1; i++){
no8 = no8next;
}
Systemoutprintln(no8num);
}
publicstaticvoidmain(String[] args) {
CycleList cl =newCycleList();
clinsert(0, 4); // index代表第几个后面,当然,第0个后面,即为插头节点
clinsert(2, 2); //无论插入还是删除
clinsert(3, 5); //更改很准确
clinsert(4, 6); //查询单个也是可以的
clinsert(5, 9);
clselect();
Systemoutprint(" ----");
clinsert(0, 8);
clselect();
Systemoutprint(" ----");
clinsertHead(3);
clselect();
Systemoutprintln("------");
cldelete(3);
clselect();
Systemoutprintln("---------");
clupdate(1, 1);
clselect();
Systemoutprint("----");
clsel(0);
}
}
实现顺序表各种基本运算的算法
2007-04-29 12:44:04| 分类:数据结构程序| 标签:|字号大中小 订阅
//实现顺序表各种基本运算的算法h#include<stdioh>
#include<malloch>
#define MaxSize 50
typedef char ElemType;typedef struct
{ElemType elem[MaxSize]; //顺序表类型定义
int length;
}SqList;void InitList(SqList &L) //初始化顺序表L
{
L=(SqList )malloc(sizeof(SqList));
L->length=0;
}void DestroyList(SqList L) //释放顺序表L
{
free(L);
}int ListEmpty(SqList L) //判断顺序表L是否为空表
{
return(L->length==0);
}
int ListLength(SqList L)
{
return(L->length);
} void DispList(SqList L)
{
int i;
if(ListEmpty(L))return;
for(i=0;i<L->length;i++)
printf("%c ",L->elem[i]);
printf("\n");
}int GetElem(SqList L,int i,ElemType &e)
{
if(i<1 || i>L->length)
return 0;
e=L->elem[i-1];
return 1;}int LocateElem(SqList L,ElemType e)
{int i=0;
while(i<L->length && L->elem[i]!=e)i++;
if(i>=L->length)
return 0;
else
return i+1;
}int ListInsert(SqList &L,int i,ElemType e)
{//在顺序表L中第i个位置上插入元素e
int j;
if(i<1 || i>L->length+1)
return 0;
i--;
for(j=L->length;j>i;j--)
L->elem[j]=L->elem[j-1];
L->elem[i]=e;
L->length++;
return 1;
}int ListDelete(SqList &L,int i,ElemType &e)
{
int j;
if(i<1 || i>L->length)
return 0;
i--;
e=L->elem[i];
for(j=i;j<L->length-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return 1;
}
//实现顺序表各种基本运算的算法cpp#include"实现顺序表各种基本运算的算法h"
#include<stdioh>void main()
{
SqList L;
ElemType e;
printf("(1)初始化顺序表L:\n");
InitList(L);
printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
ListInsert(L,5,'e');
printf("(3)输出顺序表L:");
DispList(L);
printf("(4)顺序表L长度=%d\n",ListLength(L));
printf("(5)顺序表L为%s\n",(ListEmpty(L)"空":"非空"));
GetElem(L,3,e);
printf("(6)顺序表L的第3个元素=%c\n",e);
printf("(7)元素a的位置=%d\n",LocateElem(L,'a'));
printf("(8)在第4个元素位置上插入f元素\n");
ListInsert(L,4,'f');
printf("(9)输出顺序表L:");
DispList(L);
printf("(10)删除L的第3个元素\n");
ListDelete(L,3,e);
printf("(11)输出顺序表L:");
DispList(L);
printf("(12)释放顺序表L\n");
DestroyList(L);
}
这个问题我回答过了,也被采用了,你看看吧!
答案:15
For i=1 to 4
x=4
当=4时,x=4。
For j=1 to 3
x=3
当i=4且j=3时,x=3。
当i=4且j=3时For k=1 to 2运行完,程序就结束了,这是的x=3,执行一次x=x+6,得x=9,这时i=4,j=3,k=2,在执行一次x=x+6,得x=15。
import javautilScanner;
//这是用java写的算法
public class ScoreTest {
public static void main(String[] args) {
Scanner sc = new Scanner(Systemin);
int a0 = 0,a1 = 0,a2 = 0,a3 = 0,a4 = 0,a5= 0,a6=0,a7=0,a8=0,a9=0;
for(int i = 0;i < 20;++i){
Systemoutprintln("输入第"+(i+1)+"个学生的成绩:");
int x = scnextInt();
switch(x/10){
case 9:case 10:
a9++;
break;
case 8:
a8++;
break;
case 7:
a7++;
break;
case 6:
a6++;
break;
case 5:
a5++;
break;
case 4:
a4++;
break;
case 3:
a3++;
break;
case 2:
a2++;
break;
case 1:
a1++;
break;
case 0:
a0++;
break;
}
}
Systemoutprintln("90分以上"+a9+"个");
Systemoutprintln("80-89分"+a8+"个");
Systemoutprintln("70-79分"+a7+"个");
Systemoutprintln("60-69分"+a6+"个");
Systemoutprintln("50-59分"+a5+"个");
Systemoutprintln("40-49分"+a4+"个");
Systemoutprintln("30-39分"+a3+"个");
Systemoutprintln("20-29分"+a2+"个");
Systemoutprintln("10-19分"+a1+"个");
Systemoutprintln("0-9分"+a0+"个");
}
}
e=28什么来着使用任意循环语句编写程序,计算e≈1+1/1!+1/2!++1/n!
实验步骤与要求:
(1) 用单重循环编写程序;
(2) 使误差小于给定的ε,设ε=10-5;
(3) 除了输出e以外,同时还要输出总的项数n
算法说明:
(1) e=1,n=1,temp=1
(2) 当temp>=1e-5时,反复执行(21)(22)(23),否则转(3)。
(21) e=e+temp
(22) n++
(22) temp=temp/n
(3) 打印e和n
???gjhjjjjjhgjuhjhgj
这个主要是考查asc与chr函数。循环的结果是产生一组递增数列。
asc是将字符返回对应的数字,chr是将数字返回对应的字符。所以C、D肯定错了;再看基础字母为“A”,后续是增加的,所以后面的字母不可能是小写的。故选 A。
void
main()
{
int
a,b,result;
char
m;
printf("请输入需要计算的数:\n");
scanf("%d
%d",&a,&b);
printf("请输入加、减、乘或除\n");
scanf("%c",&m);
if(m=="+")
//判断是否进行加法运算,以下同理
result=a+b;
else
if(m=="-")
result=a-b;
elsee
if(m=="")
result=ab;
else
if(m=="/")
result=a/b;
else
printf("您输入有误\n");
//如果输入的符号非加减乘或是除,报错
printf("计算结果为:%d\n",result);
//最后输出结果
}
感觉这个既可以认为是可行性错误,又可以说是有穷性错误,这看怎么理解了,总之就是这个循环是个无限循环,不会在有限次数内完成。如果非要定一个的话,应该算是可行性吧,毕竟这里面没有算法输入这一项内容。
下面是具体的说明:
算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个 *** 作。此外,一个算法还具有下列5个重要特性:
1) 有穷性
一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。
2) 确定性
算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。即对于相同的输入只能得出相同的输出。
3) 可行性
一个算法是可行的,即算法中描述的 *** 作都是吋以逋过已经实现的基本运算执行有限次来实现的。
4) 输入
一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。
5) 输出
一个算法有一个或多个的输出,这些输出是同输入有着某种特定关系的量。
通常设计一个“好”的算法应考虑达到以下目标:
正确性:算法应当能够正确地解决求解问题。
可读性:算法应当具有良好的可读性,以助于人们理解。
健壮性:当输入非法数据时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
效率与低存储量需求:效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。
(VC6下编译通过)
#include <stdioh>
main()
{
int a[1000],top,tail;
int i,n=1;
do
{
switch (n)
{
case 1:top=tail=0;break;
case 2:printf("输入要插入的元素:");scanf("%d",&a[++top]);break;
case 3:if (tail<top) tail++;break;
case 4:printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n队头为: %d\n",a[top]);break;
case 5:printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");if (tail==top) printf("空队列\n"); else printf("非空队列\n");
}
if (n!=5&&n!=4)
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("队列现在状态:");
for (i=tail+1;i<=top;i++)
printf(" %d",a[i]);
if (tail==top)
printf("空队列");
printf("\n");
printf("\n1队列初始化\n2入队 *** 作\n3出队 *** 作\n4输出队头元素\n5判断队列是否为空\n0退出\n请输入代码:");
scanf("%d",&n);
} while (n!=0);
}
以上就是关于循环链表算法原理和顺序表算法原理全部的内容,包括:循环链表算法原理和顺序表算法原理、请帮我解释一下VB for语句中内循环的算法~ 附题 叫我解、设计算法编写程序,循环输入20个学生成绩,分别统计他们中90分以上、80~89等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)