一个完整的双向链表程序(C 语言版)
刚进公司的时候,指导老师要我写个双向链表的程序,不为别的,就看看我对算法的处理能力,通过这个过程看
我的编程能力.虽然以前就写过很多次链表啊,栈啊,队列啊什么的.但是每次可以毫无疑问,每次重写一遍都
不能保证万无一失,也不能肯定自己写的足够好了.现在我把 C++和 C 语言写的都贴出来供高手批评指正,供
后来者学习借鉴.
#include <stdio.h>
#include <stdlib.h>
typedef struct tagDbNode
{
int data;
struct tagDbNode * left;
struct tagDbNode * right;
} DbNode, * pdbNode;
//创建结点
pdbNode CreateNode(int data)
{
pdbNode pnode = (pdbNode)malloc(sizeof(DbNode));
pnode->data = data;
pnode->left = pnode->right = pnode; //创建新结点时,让其前驱和后继指针都指向自身
return pnode;
}
//=========================================================================
//创建链表
pdbNode CreateList(int head) //参数给出表头结点数据 (表头结点不作为存放有意义数据的结点)
{
pdbNode pnode = (pdbNode)malloc(sizeof(DbNode));
pnode->data = head;
pnode->left = pnode->right = pnode;
return pnode;
}
//插入新结点,总是在表尾插入; 返回表头结点
pdbNode InsertNode(pdbNode node, int data) // 参数 1 是链表的表头结点,参数 2 是要插入的结点(结
点数据为 data)