循环链表算法原理和顺序表算法原理

循环链表算法原理和顺序表算法原理,第1张

其中线性表内含顺序表和链表。顺序表较为简单,仅仅需要一个数组就可以完成,当然最好也要添加一个表示长度的数据成员,如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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10635284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存