您的位置:首页 > 其它

对于链表,栈,队列,树函数参数的理解(未完)

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>此处需要返回的是头指针,所以需要传递指针变量,而不是结构题变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: