数据结构与算法顺序表
① 数据结构C语言——顺序表的应用实例
第一个程序有两个错误:
错误一:
SeqList *L;
init_SeqList(L);
应改成:
SeqList s;
SeqList *L = &s;
init_SeqList(L);
错误原因:指针只有在初始化(即只有在指向具体对象)之后才可以参与运算,你只定义了一个指针,并未将指针指向具体的对象,当执行到init_SeqList(L); 这句时,会产生越界报错。
错误二:
printf("%d\t%s\n",L->elem[1].data,L->elem[1].n);
这个语句打印出来的永远是第一个元素,而不是删除的元素,应改成:
printf("%d\t%s\n",L->elem[i].data,L->elem[i].n); //其中i为被删除元素的下标
提示:
给数组赋值时,循环最好从i=0开始,for(i=1;i<=2;i++)你从i=1开始,实际上是将值赋给了数组的第二个元素。
在工程上右键,new->Interface,然后输入名字,Intf,这样就会生成一个名为Intf.java的文件。内容如下:
public interface Intf {
public void add(int value);
public void add(int index, int value);
public void remove(int index);
public void print();
}
然后再右键,new->Class,输入名字SqLis,新建一个名为SqLis.java的文件,内容如下:
import java.util.*;
public class SqLis implements Intf{
private List<Integer> list = new LinkedList<Integer>(Arrays.asList(12,23,32,45,11,14,35));
@Override
public void add(int value) {
// TODO Auto-generated method stub
list.add(value);
}
@Override
public void add(int index, int value) {
// TODO Auto-generated method stub
list.add(index, value);
}
@Override
public void remove(int index) {
// TODO Auto-generated method stub
list.remove(index);
}
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println(list);
}
public static void main(String[] args){
SqLis list = new SqLis();
list.add(2, 34);
list.add(5, 50);
list.remove(3);
list.print();
}
}
编译运行即可。记得采纳
③ C语言 算法与数据结构 顺序表归并的问题!小白求解
你声明了L但是没有给他分配内存
④ 数据结构-顺序表-插入数组元素-时间复杂度
Pi(n-i+1)指的是你插入i元素以后,需要移动的元素的个数,然后你可以想一下,在第一个元素后面插入元素i需要移动n个元素,在第二个元素后面插入元素i需要移动元素(n-1)个元素,依此论推,在第n个元素后面插入元素i需要移动1个元素,这是一个等差数列,首项为n,公差为1,最后一项是1,你求和以后需要除以(n+1)就算出来结果了,忘采纳,不懂可以加我QQ327579459,我可以给你讲讲。
⑤ 算法与数据结构,请问,一个顺序表,如何设计一个算法,传入顺序表和一个参数x,排序使得在x前的元素比
排序里的快速排序,自己去查代码吧
⑥ 数据结构与算法中的问题,求解。对于顺序表L,指出以下算法的功能。
如图
⑦ 顺序表中如何查找多个值为e的元素 数据结构与算法的题
你说的顺序表指的是元素有序对吧?
这种顺序情况下,用折半或者二分查找是最快的,你说的有多个e,那就是多个e也挨在一起,也就是找一个区间。
简单点的方法就是查找区间的两个边界,
⑧ 数据结构与算法: 我刚了解数据结构,,知道了什么是线性表,它好像包括两类。一类是顺序表,是不是数组
你还没有入门(说话有点直)。这里的插入和删除方便与否是针对计算机的。
为什么链表方便插入?因为链表实际上是逻辑上相邻而物理上不相邻。就是说你看上去他们是相邻的,但是这些数字在计算机里面存储的位置却不是相邻的。最简单的链表的每个结点有两个域,一个是存数值,一个是存它的下一个元素的地址。所以链表在插入和删除的时候,只需要修改一个元素的表示地址的域。
那为什么数组的插入和删除不方便?因为数组是物理和逻辑都是相邻的,也就是说存储一个数组是需要一整片连续的存储空间,这样会让查找跟方便,因为可以根据起始地址和下标直接算出你要找的元素的地址。数组在插入和删除的时候,都是需要移动元素的。
你说在数组的3,4中间插入8,计算机的实际过程是先把4,5,6整体往后移动一个存储单元,然后把8放入。如果是链表插入,那就只需要把8的地址域改成指向4,然后把3的表示下一个元素的地址改成8的地址.你所说的在3,4中间打一个8,这个操作不叫插入,这叫重新定义了一个数组。插入和删除都是指在原数组基础上的。
元素很少的时候这样的区别肯定不是很明显,假如有10000个数据,你需要在第1个位置插入一个元素,数组需要移动10000次数据,而链表只要修改两个地址域即可。
记住,要站在计算机的角度去想问题。