首先,我想说的是,链表是个难点,不过考试也就一道完成程序题,4分,如果放弃了,也无可厚非的,不过搞懂了,还是比较简单的
链 表的基本单元是节点,二级考得是单向线性链表,最简单的种链表,节点有两个域,一块是数据域,用来存放数据,可以用data表示,一块是指针域,用来存放 链表下个逻辑节点的地址,可以用next表示,下面就用这样的表示方法,建立一个链表,首先要定义节点,可以像下面这样建立节点
struct node{
int data; //数据
node *next; //指针
};
链表的运算无非就是查找,插入,删除节点几个东西。
假设现在有个单向链表(里面的数据为升序的,头结点指针head),和一个节点(指针p),要把这个节点插入到这个链表中,而且仍然保持升序
首先要找到要插入的位置是吧,要用到查找,查找就是把数据域里面的数据拿出来比较,先把p->data和head->data进行比较,符合要求则做下一步,不符合要求则p=p->next,继续比较,可用下面的程序断
node *p1;p1=head; //定义一个新的节点指针,并将其指向头结点
while(p->data>p1->data){ //用while语句进行比较,符合条件执行内部函数
p1=p1->next;
}
到这个程序段执行结束后,要插入的位置已近找到了,找到了之后就是要插入了,插入页要分三种情况的吧,分别插在最前面,中间,和最后面,
1,要是要插在最前面,可以用下面的程序段
p->next=head; //将p->next指向head
head=p; //现在head不再是头了,将p的内容给head,head又是头了
2,第二种情况就是插在中间,
比如说是要将p插在p1和p2之间
p->next=p2;
p1->next=p;
3,最后的个情况就是插在最后,注意是单向的链表,不成环的,所以最后个节点的指针域里是不 存放任何东西的,不存放任何东西用NULL表示
比如p1指向最后个节点
p1->next=p;
p->next=NULL; //p的指针域里不存放任何东西
这样查找和插入都好了,只剩删除了,首先可能要用查找找到要删除的额那个节点
如果要把p1指向的节点后面的p指向的那个节点删除掉
p1->next=p->next;
delete[]p;
这样就删除了,很简单吧。
链 表的基本单元是节点,二级考得是单向线性链表,最简单的种链表,节点有两个域,一块是数据域,用来存放数据,可以用data表示,一块是指针域,用来存放 链表下个逻辑节点的地址,可以用next表示,下面就用这样的表示方法,建立一个链表,首先要定义节点,可以像下面这样建立节点
struct node{
int data; //数据
node *next; //指针
};
链表的运算无非就是查找,插入,删除节点几个东西。
假设现在有个单向链表(里面的数据为升序的,头结点指针head),和一个节点(指针p),要把这个节点插入到这个链表中,而且仍然保持升序
首先要找到要插入的位置是吧,要用到查找,查找就是把数据域里面的数据拿出来比较,先把p->data和head->data进行比较,符合要求则做下一步,不符合要求则p=p->next,继续比较,可用下面的程序断
node *p1;p1=head; //定义一个新的节点指针,并将其指向头结点
while(p->data>p1->data){ //用while语句进行比较,符合条件执行内部函数
p1=p1->next;
}
到这个程序段执行结束后,要插入的位置已近找到了,找到了之后就是要插入了,插入页要分三种情况的吧,分别插在最前面,中间,和最后面,
1,要是要插在最前面,可以用下面的程序段
p->next=head; //将p->next指向head
head=p; //现在head不再是头了,将p的内容给head,head又是头了
2,第二种情况就是插在中间,
比如说是要将p插在p1和p2之间
p->next=p2;
p1->next=p;
3,最后的个情况就是插在最后,注意是单向的链表,不成环的,所以最后个节点的指针域里是不 存放任何东西的,不存放任何东西用NULL表示
比如p1指向最后个节点
p1->next=p;
p->next=NULL; //p的指针域里不存放任何东西
这样查找和插入都好了,只剩删除了,首先可能要用查找找到要删除的额那个节点
如果要把p1指向的节点后面的p指向的那个节点删除掉
p1->next=p->next;
delete[]p;
这样就删除了,很简单吧。
