数据结构c语言版和java版有什么不同

Python020

数据结构c语言版和java版有什么不同,第1张

数据结构本身是一种逻辑上的概念,它是独立于特定语言或者实现的

比如说链表,概念上说就是一组结点构成的数据结构,其中每个结点均带有后续结点信息。各种语言都可以实现链表,但实现的思路都是基于上面的逻辑概念。

因此,学习数据结构不必拘泥于某种特定语言,归根结底是要把握每个数据结构(逻辑上)的精髓

在这个基础上,每种语言都可以实现特定的数据结构,差别只在于语法实现级别。

另外虽然Java/C++等语言都带有大量的标准类库,但这并不意味着可以忽视数据结构基础理论的学习。这直接关系到实际应用时,是只能死板套用现成模板,还是灵活应用各种结构高效实现需求。

《数据结构与抽象java语言描述第四版》百度网盘pdf最新全集下载:

链接:https://pan.baidu.com/s/163N0AXhLT3hc2vetn8tzgw

?pwd=2kfx 提取码:2kfx

简介:本书是一本数据结构的教材,Java语言与数据结构两条知识主线贯穿始终,这两条主线既相互独立又相互支撑。本书介绍了计算机编程中使用的数据结构和算法,包括29章,

每章涉及一个ADT或其不同实现的规格说明和用法;书中贯穿9个Java插曲,涉及Java的高级特性。本书主要讲述了组织数据、设计类、包、栈、递归、排序、队列、双端队列、

优先队列、线性表、有序表、查找、字典、散列、树、二叉查找树、堆、平衡查找树、图等内容,并对算法的效率进行了分析。本书非常适合作为大学本科生数据结构课程的教材,也可作为计算机研究与开发人员的参考书。  

package game24.datastructure.list

/**

 * 链表的结点

 * @author luoweifu

 *

 */

class Node{

Object data //数据元素

Node next //后驱结点

public Node() {

this(null)

}

public Node(Object data) {

this.data = data

this.next = null

}

}

/**

 * 带头结点的链式链表,下标从0开始 

 * @author Administrator

 *

 */

public class SinglyLinkedList<E>{

Node head //头结点

int size //链表的大小

public SinglyLinkedList() {

head = new Node()

size = 0

}

public SinglyLinkedList(E[] datas) {

int n = datas.length

head = new Node()

Node p = head

for(int i=0 i<n i++) {

p.next = new Node(datas[i])

p = p.next

}

size = n

}

public SinglyLinkedList(SinglyLinkedList list) {

head = list.head

size = list.size()

}

public void add(Object e) {

Node p

if(0 == size) {

p = head

} else {

p = index(size-1)

}

p.next = new Node(e)

size ++

}

public void concat(SinglyLinkedList list) {

Node lastNode = this.index(size - 1)

lastNode.next = list.index(0)

size += list.size()

}

public void clear() {

head.next = null

size = 0

}

public Object get(int i) {

Node p = index(i)

return p.data

}

private Node index(int i) {

Node p = null

if(i>=0 && i<size){

p = head

for(int j=0 j<=i j++) {

p = p.next

}

return p

}

public int indexOf(Object e) {

Node p = head.next

int i = 0

while(!p.data.equals(e)) {

p = p.next

i++

}

if(i<size)

return i

else 

return -1

}

public void insert(int i, Object e) {

Node p = index(i)

Node p2 = new Node(e)

p2.next = p.next

p.next = p2

size ++

}

public boolean isEmpty() {

if(size ==0)

return true

else

return false

}

public int lastIndexOf(Object e) {

int i = size-1

while(!get(i).equals(e)) {

i--

}

if(i>=0)

return i

else 

return -1

}

public void remove(int i) {

if(i>=0 && i<size) {

Node p = null

if(i == 0)

p = head

else {

p = index(i-1)

}

p.next = index(i).next

}

size --

}

public void set(int i, Object e) {

Node p = index(i)

p.data = e

}

public int size() {

return size 

}

@Override

public boolean equals(Object obj) {

SinglyLinkedList list = (SinglyLinkedList)obj

if(this == obj && size == list.size) {

return true

}

return false

}

/**

 * 测试线性表

 * @param args

 */

public static void main(String args[]) {

//List list = new LinkList()

//List list = new DoubleLinkList()

SinglyLinkedList list1 = new SinglyLinkedList()

for(int i=0 i<10 i++) {

list1.add(new Integer(i))

}

Integer [] a = {101, 102, 103, 104, 105, 106, 107, 108, 109, 110}

SinglyLinkedList list = new SinglyLinkedList(a)

list.remove(9)

System.out.print("size:" + list.size() + "\n")

System.out.println("isEmpty:" + list.isEmpty())

System.out.print("第7个位置的元素:" + list.get(7) + "\n")

list.concat(list1)

for(int i=0 i<list.size() i++) {

System.out.print(list.get(i) + "    ")

}

list.add(21)

list.add(22)

list.insert(3, new Integer(5))

System.out.print("size:" + list.size() + "\n")

System.out.print("第一次出现5的索引:" + list.indexOf(5) + "\n")

System.out.print("最后一次出现5的索引:" + list.lastIndexOf(5) + "\n")

list.set(0, new Integer(30))

for(int i=0 i<list.size() i++) {

System.out.print(list.get(i) + "    ")

}

SinglyLinkedList list2 = list

System.out.println("\n is equels?  " + list2.equals(list))

}

}