java 链表放置结构体_创建链表采用两种方法(结构体和类)

加油其实并不难,熟悉语法,然后按照流程图来进行操作问题就是不大。问题就出现在编程语言不熟悉。新的一天加油!

c33af2749c2d

-----------------------------------------------------------------------------------------------------------------------------------

c33af2749c2d

-----------------------------------------------------------------------------------------------------------------------------------

//库函数头文件包含

#include

using namespace std;

//函数状态码定义

#define TRUE        1

#define FALSE      0

#define OK          1

#define ERROR      0

#define INFEASIBLE -1

#define OVERFLOW  -2

typedef int  Status;

typedef int  ElemType; //假设线性表中的元素均为整型

typedef struct LNode  //定义节点的结构

{

ElemType data;

struct LNode *next;

}LNode,*LinkList;    //这个节点的别名

/*

LNode是给这个结构起的一个名字,可以用LNode去定义变量,

在这里已经和int/char这样的关键字一样了。

*LinkList是指向这个结构的一个指针,也可以去定义变量,

定义出来的是指向这个结构的指针变量。

*/

Status ListCreate_L(LinkList &L,int n)  //创建链表采用尾插法,较为方便

{

LNode *rearPtr,*curPtr;  //一个尾指针,一个指向新节点的指针

//L=(LNode*)malloc(sizeof (LNode));

L=new LNode; //新建一个节点L

if(!L)exit(OVERFLOW);

L->next=NULL;              //先建立一个带头结点的单链表

rearPtr=L;  //初始时头结点为尾节点,rearPtr指向尾巴节点

for (int i=1;i<=n;i++){  //每次循环都开辟一个新节点,并把新节点拼到尾节点后

curPtr=new LNode;//生成新结点

if(!curPtr)exit(OVERFLOW);

cin>>curPtr->data;//输入元素值

curPtr->next=NULL;  //最后一个节点的next赋空

rearPtr->next=curPtr;

rearPtr=curPtr;

}

return OK;

}

int main()

{

LinkList L;

int n;

int x,k;

cin>>n;  //输入链表中元素个数

if(ListCreate_L(L,n)!= OK) {

cout<

return -1;

}

return 0;

}

-----------------------------------------------------------------------------------------------------------------------------------

Class版

#include

using namespace std;

class List;//友元类的前置声明

class Node//节点

{

friend class List;//声明一个友元类 ,然后就可以对私有的进行操作

private:

int data;  //节点中数据

Node* link; //指向下一个节点的指针

};

class List//链表

{

public:

void test();

void show();

private:

Node* first;

};

void List::test(){

Node *f=new Node();

f->data=44;

f->link=0;

first=f;

f=new Node();

f->data=72;

f->link=0;

first->link=f;

f=new Node();

f->data=210;

f->link=0;

first->link->link=f;

}

void List::show(){    //::作用域所属关系属于List这个类下的show方法

cout<data<

< link->data<

<link->link->data<

}

int main(){

List a;

a.test(); //创建了三个节点

a.show();

cout<

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * 基于链表实现树结构 */ package dsa; public class TreeLinkedList implements Tree { private Object element;//树根节点 private TreeLinkedList parent, firstChild, nextSibling;//父亲、长子及最大的弟弟 //(单节点树)构造方法 public TreeLinkedList() { this(null, null, null, null); } //构造方法 public TreeLinkedList(Object e, TreeLinkedList p, TreeLinkedList c, TreeLinkedList s) { element = e; parent = p; firstChild = c; nextSibling = s; } /*---------- Tree接口中各方法的实现 ----------*/ //返回当前节点中存放的对象 public Object getElem() { return element; } //将对象obj存入当前节点,并返回此前的内容 public Object setElem(Object obj) { Object bak = element; element = obj; return bak; } //返回当前节点的父节点;对于根节点,返回null public TreeLinkedList getParent() { return parent; } //返回当前节点的长子;若没有孩子,则返回null public TreeLinkedList getFirstChild() { return firstChild; } //返回当前节点的最大弟弟;若没有弟弟,则返回null public TreeLinkedList getNextSibling() { return nextSibling; } //返回当前节点后代元素的数目,即以当前节点为根的子树的规模 public int getSize() { int size = 1;//当前节点也是自己的后代 TreeLinkedList subtree = firstChild;//从长子开始 while (null != subtree) {//依次 size += subtree.getSize();//累加 subtree = subtree.getNextSibling();//所有孩子的后代数目 } return size;//即可得到当前节点的后代总数 } //返回当前节点的高度 public int getHeight() { int height = -1; TreeLinkedList subtree = firstChild;//从长子开始 while (null != subtree) {//依次 height = Math.max(height, subtree.getHeight());//在所有孩子中取最大高度 subtree = subtree.getNextSibling(); } return height+1;//即可得到当前节点的高度 } //返回当前节点的深度 public int getDepth() { int depth = 0; TreeLinkedList p = parent;//从父亲开始 while (null != p) {//依次 depth++; p = p.getParent();//访问各个真祖先 } return depth;//真祖先的数目,即为当前节点的深度 } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值