b2c信息网

您现在的位置是:首页 > 热点事件 > 正文

热点事件

linklist源码(list集合源码)

hacker2022-06-08 20:40:19热点事件91
本文目录一览:1、java中用LinkList对双向链表获取上下元素操作

本文目录一览:

java 中用LinkList对双向链表获取上下元素操作

你去查看LinkedList源码

这个类里面有个内部类Link

它封闭了三个东西,本身,前驱,后驱

我想你应该明白了吧

private static final class Link

{

Object data;

Link previous;

Link next;

Link(Object o, Link p, Link n)

{

data = o;

previous = p;

next = n;

java中linklist.size()是什么意思

list的包含元素的个数,长度~

ArrayList alist = new ArrayList();

alist.add("111");

alist.add("222");

alist.add("333");

System.out.println(alist.size());

以上输出结果为3,因为向该变量中共添加了3个元素。

急!急!建立一个动态链表,用malloc函数开辟新结点,结点包含姓名、年龄、学号,然后输出的源代码,急求!

#includestdio.h

#includemalloc.h

#includestring.h#define NAMEMAX 50

#define NOMAX 20

#define DATATYPE STUDENT

typedef struct node

{

void *data;

struct node *left;

struct node *right;

}NODE;typedef struct

{

struct node *head;

struct node *current;

struct node *rear;

int count;

}linklist;typedef struct

{

char name[NAMEMAX];

int age;

char no[NAMEMAX];

}DATATYPE;void init_linklist(linklist *list)

{

list-head=NULL;

list-current=NULL;

list-rear=NULL;

list-count=0;

}void add_linklist(linklist *list,void *data)

{

NODE *newNode;

newNode=(NODE *)malloc(sizeof(NODE));

newNode-data=data;

if(list-head==NULL)

{

list-head=newNode;

list-current=newNode;

list-rear=newNode;

newNode-left=NULL;

newNode-right=NULL;

list-count++;

}

else

{

list-rear-right=newNode;

newNode-left=list-rear;

newNode-right=NULL;

list-rear=newNode;

list-current=newNode;

list-count++;

}

}

void free_list(linklist *list,DATATYPE*)

{

NODE *tmp=list-head;

while(tmp!=NULL)

{

if(tmp-left==NULL)

{

tmp=tmp-right;

continue;

}

else if(tmp-right==NULL)

{

free((DATATYPE*)(tmp-data));

free(tmp);

break;

}

else

{

free((DATATYPE*)(tmp-left-data));

free(tmp-left);

tmp=tmp-right;

}

} init_linklist(list);

return;

}void printlist(linklist *list,DATATYPE*)

{

NODE *tmp=list-head;

int i=0;

while(tmp!=NULL)

{

printf("第%d条记录:\n",++i);

printf("----------------------------\n");

printf("姓名为:%s\n",((DATATYPE*)(tmp-data))-name);

printf("年龄为:%d\n",((DATATYPE*)(tmp-data))-age);

printf("学号为:%s\n",((DATATYPE*)(tmp-data))-no);

printf("----------------------------\n");

tmp=tmp-right;

}

return;

}int main()

{

DATATYPE *pStu=NULL;

char buf[50]={0};

linklist list;

init_linklist(list);

while(1)

{

pStu=(DATATYPE*)malloc(sizeof(DATATYPE));

memset(pStu,0,sizeof(DATATYPE)); printf("请输入姓名:");

fgets(pStu-name,NAMEMAX,stdin);

pStu-name[strlen(pStu-name)-1]=0; printf("请输入年龄:");

scanf("%d",(pStu-age));

getchar(); printf("请输入序号:");

fgets(pStu-no,NOMAX,stdin);

pStu-no[strlen(pStu-no)-1]=0; add_linklist(list,pStu);

printf("是否继续添加(y/n):");

memset(buf,0,50);

fgets(buf,50,stdin);

buf[strlen(buf)-1]=0;

if (!strcmp("y",buf) || !strcmp("Y",buf))

continue;

else

break;

}

printf("\n结果为:\n");

printlist(list,0);

free_list(list,0);

return 0;

} //void printlist(linklist *list,DATATYPE*) 楼下的这DATATYPE后面这个类型没意思?? 告诉你这是显示强调里面要使用DATATYPE这个类型,而又不使用它 printlist(list,0); 这句就能体现,还有个功能就是释放内存时你考虑了没 虽然这题free void*指针是可以释放的 但是如果在C++ 中你如果直接释放void*指针 而不指定其类型 那么这个对象就释放不测底 。#define DATATYPE STUDENT 我定义这个宏的目的就是能够方便的智能的释放内存。 如果你把STUDENT的这个结构体改了 不叫这个名字 那么岂不是又要在相关的代码更改名字,而我这个只要修改这个宏就行了,我写这么复杂?告诉你我这个代码基本是直接拷贝的 这代码是以前写过的,使用的通用双向链表 我只是截取了我写的一部分函数写代码的目的是要通用,要能够重复利用。

怎么求单链表的长度?有没有C的源代码?

int Listlength(Linklist *L) //求链表长度

{

node *p; //链表的单个元素指针,而不能用链表

int j=0;

p=L; //将其指向链表的第一个元素

while(p-next!=NULL)

{

++j;

p=p-next;

}

return j;

}

发表评论

评论列表

  • 弦久朮生(2022-06-09 03:29:16)回复取消回复

    f("年龄为:%d\n",((DATATYPE*)(tmp-data))-age); printf("学号为:%s\n",((DATATYPE*)(tmp-data))-no); printf("----

  • 双笙辞别(2022-06-09 01:49:33)回复取消回复

    ist *list){ list-head=NULL; list-current=NULL; list-rear=NULL; list-count=0;}void add_linklist(linklist *list,void *data){ NODE *n

  • 闹旅怯朲(2022-06-08 20:42:49)回复取消回复

    )); free(tmp); break; } else { free((DATATYPE*)(tmp-left-data)); free(tmp-l