对于链表,栈,队列,树函数参数的理解(未完)
2016-09-05 18:34
211 查看
对于最近学习的链表,栈,队列,二叉树(基础)的函数参数有了更深的理解。
对于这几个数据结构,可以采用静态,或者是链式存储和操作,但是它们函数的参数却是不一样的。
对于一些链式存储和操作的,有3种方法来返回头指针
1 在函数外新建头指针,然后函数返回头指针
2 用二级指针
3 用参数的引用(效果和二级指针一样)
链表(静态):
<span style="font-size:14px;">typedef struct list
{
int *base;//数组指针
int lengh;//当前表的长度
int listsize;//空间大小
}qlist;
//初始化
////此处用的是&l相当于传入l的地址,作用类似于传递指向l的指针
void creat_(qlist &l,int initsize)//initsize为自定义的数组长度,需要把它负值给listsize;
{
l.base=(int*)malloc(initsize*sizeof(int));//开辟了一个int数组大小为initsize
if(l.base==NULL)
{
cout<<"分配内存失败";
}
l.lengh=0;//置为空表
l.listsize=initsize;//当前空间大小
}
int main()
{
qlist q;
}</span>此处传递的是struct list q,对于静态分配的,即是用数组表示的,所以它不要用指针指向a[0],只需要lengh来表示当前的长度即可,所以它不需要二级指针,或者是参数引用
链表(动态1参数的引用):
<span style="font-size:14px;">typedef struct node
{
int a;
struct node *next;
}NODE,*PNODE;
//构建链表
void creat_(PNODE &head)
{
PNODE q,p;//定义头指针head,代替头指针球q(头指针不能动)
head=(PNODE)malloc(sizeof(NODE));//分配内存给head
if(head==NULL)
{
printf("分配内存失败");
}
head->next=NULL;
int num,num_,i;
scanf("%d",&num);
q=head;//代替头指针q
for(i=0;i<num;i++)
{
p=(PNODE)malloc(sizeof(NODE));//开辟一个节点,并让p指向它
scanf("%d",&num_);
p->a=num_;
q->next=p;//让上一个指针指向该节点(如果是第一个结点则是头指针)
q=p;//q指针也指向p指针指向的结点
}
q->next=NULL;
}
int main()
{
PNODE head;
}</span>
(动态2:返回新建的头指针)
<span style="font-size:14px;">typedef struct node
{
int a;
struct node *next;
}NODE,*PNODE;
//构建链表
PNODE creat_()
{
PNODE head,q,p;//定义头指针head,代替头指针球q(头指针不能动)
head=(PNODE)malloc(sizeof(NODE));//分配内存给head
if(head==NULL)
{
printf("分配内存失败");
}
head->next=NULL;
int num,num_,i;
scanf("%d",&num);
q=head;//代替头指针q
for(i=0;i<num;i++)
{
p=(PNODE)malloc(sizeof(NODE));//开辟一个节点,并让p指向它
scanf("%d",&num_);
p->a=num_;
q->next=p;//让上一个指针指向该节点(如果是第一个结点则是头指针)
q=p;//q指针也指向p指针指向的结点
}
q->next=NULL;
return head;
}
int main()
{
pnode head;
head=creat_();
}
</span>此处需要返回的是头指针,所以需要传递指针变量,而不是结构题变量
对于这几个数据结构,可以采用静态,或者是链式存储和操作,但是它们函数的参数却是不一样的。
对于一些链式存储和操作的,有3种方法来返回头指针
1 在函数外新建头指针,然后函数返回头指针
2 用二级指针
3 用参数的引用(效果和二级指针一样)
链表(静态):
<span style="font-size:14px;">typedef struct list
{
int *base;//数组指针
int lengh;//当前表的长度
int listsize;//空间大小
}qlist;
//初始化
////此处用的是&l相当于传入l的地址,作用类似于传递指向l的指针
void creat_(qlist &l,int initsize)//initsize为自定义的数组长度,需要把它负值给listsize;
{
l.base=(int*)malloc(initsize*sizeof(int));//开辟了一个int数组大小为initsize
if(l.base==NULL)
{
cout<<"分配内存失败";
}
l.lengh=0;//置为空表
l.listsize=initsize;//当前空间大小
}
int main()
{
qlist q;
}</span>此处传递的是struct list q,对于静态分配的,即是用数组表示的,所以它不要用指针指向a[0],只需要lengh来表示当前的长度即可,所以它不需要二级指针,或者是参数引用
链表(动态1参数的引用):
<span style="font-size:14px;">typedef struct node
{
int a;
struct node *next;
}NODE,*PNODE;
//构建链表
void creat_(PNODE &head)
{
PNODE q,p;//定义头指针head,代替头指针球q(头指针不能动)
head=(PNODE)malloc(sizeof(NODE));//分配内存给head
if(head==NULL)
{
printf("分配内存失败");
}
head->next=NULL;
int num,num_,i;
scanf("%d",&num);
q=head;//代替头指针q
for(i=0;i<num;i++)
{
p=(PNODE)malloc(sizeof(NODE));//开辟一个节点,并让p指向它
scanf("%d",&num_);
p->a=num_;
q->next=p;//让上一个指针指向该节点(如果是第一个结点则是头指针)
q=p;//q指针也指向p指针指向的结点
}
q->next=NULL;
}
int main()
{
PNODE head;
}</span>
(动态2:返回新建的头指针)
<span style="font-size:14px;">typedef struct node
{
int a;
struct node *next;
}NODE,*PNODE;
//构建链表
PNODE creat_()
{
PNODE head,q,p;//定义头指针head,代替头指针球q(头指针不能动)
head=(PNODE)malloc(sizeof(NODE));//分配内存给head
if(head==NULL)
{
printf("分配内存失败");
}
head->next=NULL;
int num,num_,i;
scanf("%d",&num);
q=head;//代替头指针q
for(i=0;i<num;i++)
{
p=(PNODE)malloc(sizeof(NODE));//开辟一个节点,并让p指向它
scanf("%d",&num_);
p->a=num_;
q->next=p;//让上一个指针指向该节点(如果是第一个结点则是头指针)
q=p;//q指针也指向p指针指向的结点
}
q->next=NULL;
return head;
}
int main()
{
pnode head;
head=creat_();
}
</span>此处需要返回的是头指针,所以需要传递指针变量,而不是结构题变量
相关文章推荐
- 关于对于C语言中主函数参数接返回值的理解
- UNIX环境编程学习笔记------编程实例-----对于 函数 inet_ntop()函数的第四个参数的理解
- C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- 理解Javascript_14_函数形式参数与arguments
- 对于js中eval()函数的理解 和 写一个函数trim() 去掉字符串左右空格
- [Microsoft][ODBC SQL Server Driver][SQl Server]参数数据类型 text 对于 replace 函数的参数 1 无效。
- [Microsoft][ODBC SQL Server Driver][SQl Server]参数数据类型 text 对于 replace 函数的参数 1 无效。
- 一级指针不能做函数参数传递动态内存的理解
- 对于js中eval()函数的理解 和 写一个函数trim() 去掉字符串左右空格
- SQL报错“参数数据类型 text 对于 replace 函数的参数 1 无效”
- 对于虚函数的真切的理解
- 对于函数重载的理解
- 对消息队列各函数理解
- 理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列
- bool当成函数参数错误理解
- 参数数据类型 text 对于 replace 函数的参数 1 无效
- 对于拷贝构造函数中参数是引用的理解
- 关于js深入理解:json作为函数参数 类似于jQuery的post函数,具有url,data ,和回调函数
- 如何理解数组作为函数参数时,数组名就是指针?
- Objective-C 函数参数理解