linklist源码(list集合源码)
本文目录一览:
- 1、java 中用LinkList对双向链表获取上下元素操作
- 2、java中linklist.size()是什么意思
- 3、急!急!建立一个动态链表,用malloc函数开辟新结点,结点包含姓名、年龄、学号,然后输出的源代码,急求!
- 4、怎么求单链表的长度?有没有C的源代码?
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;
}