c语言链表结点
‘壹’ C语言单链表节点
单链表的头插入:
L是头结点,
p是插入结点,
假设:
链表结构为
L->A->B...
L->next=NULL; // 这条语句有问题, 头结点插入是不需要这句的, 否则.p->next=L->next就都等于null了;
p->next=L->next; //p的下个结点指向头结点L的下个结点A, 即:p的下个结点指向原第2个结点A
L->next=p; // 头结点L的下个结点指向p, 即将p插入到L的后面
// 最终结果为:L->P->A->B...---------------------------------------
单链表的尾插入:L是尾结点,p是插入结点,r为标记末尾结点
假设:
链表结构为
..A->B->L
L->next=NULL;//末尾结点没有下个结点, 即next指向null
r=L; // r标记末尾结点
p->next=NULL; // p待插入的末尾结点, 同样没有下个结点, next指向null
r->next=p; // 将末尾结点r的下个结点指向p, 即:L下个结点指向p
r=p; // 将r重新指向新的末尾结点p
//最终结果:A->B->L->P
‘贰’ C语言中结点是什么
1、在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结
点。在C语言中,链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据;二为下一个结点的地址,即指针域和数据域。数据结构中的每一个数据结点对应于一个储存单元,这种储存单元称为储存结点,也可简称结点。
2、举例说明如下:
1)对于线性表存储结构:
1, 2, 3, 4, 5, ......, k, k+1, .......
则结点k+1的直接前驱结点为结点k
2)对于链表存储结构
// 结点的定义
struct node
{
int data; // 数据域
struct node *next; // 指针域
};
struct node *Head; // Head表示链表的头结点,则Head->next为头结点Head的后继结点;Head为Head->next的前驱节点
‘叁’ 如何用C语言编写一个链表结点查找的算法
#include<iostream>
using namespace std;
class Chain;
class ChainNode
{
friend Chain;
private:
int data;
ChainNode *link;
};
class Chain
{
public:
Chain();
~Chain();
bool IsEmpty()const{return first==0;}
void fun();//查找函数
private:
ChainNode *first;//指向第一个节点指针
};
Chain::Chain()
{
first=new ChainNode;
first->data=1;
first->link=NULL;
}
Chain::~Chain()
{
ChainNode *next;
while(first)
{
next=first->link;
delete first;
first=next;
}
}
void Chain::fun(int key)
{
if(first==NULL)
return;
ChainNode *p=first->link;
while(p!=NULL)
{
if(p->data==key)
return 1;
else
p=p->link;
}
}
int main()
{
int n;
Chain mychain1;
cout<<"请输入需要查找的节点的关键值:";
cin>>n;
mychain1.fun(n);
cout<<endl;
return 0;
}