链表的插入操作
来源:互联网 发布:淘宝电脑版首页登录 编辑:程序博客网 时间:2024/05/01 17:26
这里介绍两种代码最简单(emmm 应该是最简单的)的单链表和双链表的插入操作
- 单链表
#include <stdlib.h>#include <stdio.h>#define FALSE 0#define TRUE 1struct Node{ Node *link; int value}/* linkp在作为参数传递时指示的是指向根指针的指针 */int sll_insert(register Node **linkp,int new_value){ register Node *current; register Node *new; // 遍历链表,知道新的值大于或等于节点的值 while((current=*linkp)!=NULL && current->value<new_value) linkp=¤t->link; new=(Node *)malloc(sizeof(Node)); if(new==NULL) return FALSE; new->value=new_value; // 插入新节点 new->link=current; *linkp=new; return TRUE;}
- 双链表
#include <stdlib.h>#include <stdio.h>struct Node{ Node *fwd; Node *bwd; int value}/* rootp在作为参数传递时指示的是根指针 */int dll_insert(register Node *rootp,int new_value){ register Node *this; register Node *next; register Node *newnode; /* 遍历链表,查看new_value是否已经存在与链表中, 是就返回知道新的值大于或等于节点的值, 否就新建一个节点存储新的值, this指向新节点之前的节点, next指向新节点之后的节点。 */ for(this=rootp;(next=this->fwd)!NULL;this=next) { if(next->value==new_value) return 0; if(next->value>new_value) break; } newnode=(Node *)malloc(sizeof(Node)); if(new_value==NULL) return -1; newnode->value=new_value; newnode->fwd=next; this->fwd=newnode; // 如果插入的节点不是在起始位置 if(this!=rootp) newnode->bwd=this; else newnode->bwd=NULL; // 如果插入的节点不是在末尾位置 if(next!==NULL) next->bwd=newnode; else rootp->bwd=newnode; return 1;}
阅读全文