链表中的怎么使用指针进行链表的建立、插入、删除等处理操作
3个回答
展开全部
1、链表建立需要节点。这是存储数据的基础,以C++语言为例,要建立这样的节点(假设存储信息的类型作为一个模板)
template <class DataType>
struct Node{
DataType info; //节点存储的信息
Node<DataType> *next;
};
2、因为你是使用指针,那么,就需要动态创建结构体。使用new 运算符在堆内存中创建
Node<DataType> *head = new Node<DataType>;
堆内存和栈不同,你动态申请和释放都是在堆内存里,所以你不用担心调用一个函数,在
这个函数里动态申请了内存,返回之后没有了,在的。
3、插入节点
我们以插入头结点后边为例:
假设函数原型为:
void AddToFirst( Node<DataType> * head, DataType data );
那么函数主体中这样写:
{
Node<DataType> * ptr = new Node<DataType>; //动态生成一个新的节点
ptr->info = data; //存储传递过来的DataType类型的数据
ptr->next = head->next; //先让ptr指向的地方为head指向的地方
head->next = ptr; //再让头结点指向ptr
}
这样,添加到头结点之后的动作就完成了。
4、删除操作
删除操作需要查找是否存在要删除的数据,存在则删除,不存在不采取动作
函数原型:
void DeleteNode ( Node<DataType> *head, DataType data );
我们设置ptr作为遍历链表的游标,设置ptrNext指针作为ptr的下一个节点,将它里面的info与data对比;
设置两个指针是为了方便我们删除节点。
函数定义如下
{
Node<DataType> *ptr = head;
Node<DataType> *ptrNext = prt->next;
while( ptrNext && ptrNext->info != data ){ //当ptrNext不是NULL且包含的数据不等于data时
ptr = ptrNext;
ptrNext = ptrNext->next; //ptr和ptrNext均往下移动一次
}
if( ! ptrNext ) //如果ptrNext == NULL
cout << "链表中不存在此数据:" << data << endl;
else{ //那么跳出循环的情况就只能是ptrNext->info == data啦,此处删除ptrNext;
ptr->next = ptrNext->next; //释放ptrNext指向的堆内存之前,要把
//ptrNext之前的节点,也就是ptr,将其指向prtNext指向的地方
delete ptrNext; //释放堆内存
cout << "删除成功!" << endl;
}
}
关于链表的建立、添加节点、删除节点,还需要你自己多多琢磨。
template <class DataType>
struct Node{
DataType info; //节点存储的信息
Node<DataType> *next;
};
2、因为你是使用指针,那么,就需要动态创建结构体。使用new 运算符在堆内存中创建
Node<DataType> *head = new Node<DataType>;
堆内存和栈不同,你动态申请和释放都是在堆内存里,所以你不用担心调用一个函数,在
这个函数里动态申请了内存,返回之后没有了,在的。
3、插入节点
我们以插入头结点后边为例:
假设函数原型为:
void AddToFirst( Node<DataType> * head, DataType data );
那么函数主体中这样写:
{
Node<DataType> * ptr = new Node<DataType>; //动态生成一个新的节点
ptr->info = data; //存储传递过来的DataType类型的数据
ptr->next = head->next; //先让ptr指向的地方为head指向的地方
head->next = ptr; //再让头结点指向ptr
}
这样,添加到头结点之后的动作就完成了。
4、删除操作
删除操作需要查找是否存在要删除的数据,存在则删除,不存在不采取动作
函数原型:
void DeleteNode ( Node<DataType> *head, DataType data );
我们设置ptr作为遍历链表的游标,设置ptrNext指针作为ptr的下一个节点,将它里面的info与data对比;
设置两个指针是为了方便我们删除节点。
函数定义如下
{
Node<DataType> *ptr = head;
Node<DataType> *ptrNext = prt->next;
while( ptrNext && ptrNext->info != data ){ //当ptrNext不是NULL且包含的数据不等于data时
ptr = ptrNext;
ptrNext = ptrNext->next; //ptr和ptrNext均往下移动一次
}
if( ! ptrNext ) //如果ptrNext == NULL
cout << "链表中不存在此数据:" << data << endl;
else{ //那么跳出循环的情况就只能是ptrNext->info == data啦,此处删除ptrNext;
ptr->next = ptrNext->next; //释放ptrNext指向的堆内存之前,要把
//ptrNext之前的节点,也就是ptr,将其指向prtNext指向的地方
delete ptrNext; //释放堆内存
cout << "删除成功!" << endl;
}
}
关于链表的建立、添加节点、删除节点,还需要你自己多多琢磨。
展开全部
struct NODE
{ int data;
struct NODE *next;
};
typedef struct NODE SLIST;
SLIST *creat_list()
{ SLIST *h,*s,*r;
int c;
h=(SLIST *)malloc(sizeof(SLIST));//创建头节点
r=h;
scanf("%d",&c);
while(c!=-1)
{ s=(SLIST *)malloc(sizeof(SLIST));//建立新节点
s->data=c;
r->next=s;
r=s;
scanf("%d",&c);
}
r->next='\0';
return h;
}
main()
{ SLIST *head;
head=creat_list();
}
{ int data;
struct NODE *next;
};
typedef struct NODE SLIST;
SLIST *creat_list()
{ SLIST *h,*s,*r;
int c;
h=(SLIST *)malloc(sizeof(SLIST));//创建头节点
r=h;
scanf("%d",&c);
while(c!=-1)
{ s=(SLIST *)malloc(sizeof(SLIST));//建立新节点
s->data=c;
r->next=s;
r=s;
scanf("%d",&c);
}
r->next='\0';
return h;
}
main()
{ SLIST *head;
head=creat_list();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道,百度查询下把
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询