关于传递指针的指针的问题
在大话数据结构这本书关于建立单链表的代码中,创建单链表的的代码是通过传递头指针的指针来实现的,我觉得好像没有必要,初始化的时候传递头指针的指针我能理解,其他地方我觉得只要传递头指针就可以了,以下是代码,大家看看我说的是不是正确。
①static Status ListInsert(LinkList *L,int i,ElemType e) /*???这里的LinkList *L,我能不能改成LinkList L???*/
-------------》
static Status ListInsert(LinkList L,int i,ElemType e) /*???这里的LinkList *L,我能不能改成LinkList L???*/
然后里面的p=*L; 改成p=L;
如果将函数改成以上的形式可以吗?
②另外,在函数ListInsert中,这里的if(!p || j >i)判断条件的 j >i是不是多余的?会有这种情况发生吗?
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;
static Status visit(ElemType c)
{
printf("%d ",c);
return OK;
}
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkList;
/* 初始化顺序线性表 */
static Status InitList(LinkList *L)
{
*L=(LinkList) malloc(sizeof(Node));
if(!(*L))
return ERROR;
(*L)->next=NULL;
return OK;
}
/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */
static int ListLength(LinkList L)
{
int i=0;
LinkList p;
p=L->next;
while(p)
{
i++;
p=p->next;
}
return i;
}
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
/* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
static Status ListInsert(LinkList *L,int i,ElemType e) /*???这里的LinkList *L,我能不能改成LinkList L???*/
{
int j;
LinkList p,s;
p=*L; /*???这里改成p=L???*/
j=1;
while(p && j<i) /* 寻找第i个结点,且让p指向i之前的那一个节点 */
{
p=p->next;
j++;
}
if(!p || j>i)
return ERROR;
s=(LinkList)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
/* 初始条件:顺序线性表L已存在 */
/* 操作结果:依次对L的每个数据元素输出 */
static Status ListTraverse(LinkList L)
{
LinkList p=L->next;
while(p)
{
visit(p->data);
p=p->next;
}
printf("\n");
return OK;
}
main()
{
Status i;
ElemType e;
LinkList L;
int j,k;
i=InitList(&L);
printf("初始化L后:ListLength(L)=%d\n",ListLength(L));
for(j=1;j<=5;j++)
{
i=ListInsert(&L,1,j);
}
printf("在L的表头依次插入1~5后:L.data=");
ListTraverse(L);
return 0;
}
①static Status ListInsert(LinkList *L,int i,ElemType e) /*???这里的LinkList *L,我能不能改成LinkList L???*/
-------------》
static Status ListInsert(LinkList L,int i,ElemType e) /*???这里的LinkList *L,我能不能改成LinkList L???*/
然后里面的p=*L; 改成p=L;
如果将函数改成以上的形式可以吗?
②另外,在函数ListInsert中,这里的if(!p || j >i)判断条件的 j >i是不是多余的?会有这种情况发生吗?
...全文
相关推荐
函数参数的传递问题(指针的指针)
结论:1. 函数的返回值是指针类型的,检查是静态内存指针还是堆内存指针还是栈内存指针,栈内存指针是绝对要不得滴!2. 函数需要使用指针参数进行传入传出的,在函数中只能对指针的指向的值(*p)进行修改,而不能修改指针指向,也就是指针地址!(函数中不得修改指针参数的地址,否则请使用指针的指针!
指针的指针实例讲解
指针的指针实例讲解 比那些纯文字性的描述更容易理解
深入理解c++指针的指针和指针的引用
下面小编就为大家带来一篇深入理解c++指针的指针和指针的引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧
go代码-Go 指向指针的指针
go代码-Go 指向指针的指针
c++之指针作为函数参数传递的问题.pdf
c++之指针作为函数参数传递的问题的pdf版本 博客:http://blog.csdn.net/fjb2080 欢迎访问!


