文章标题

来源:互联网 发布:俄罗斯网络裸体内衣秀 编辑:程序博客网 时间:2024/05/19 09:13

include

include

define FALSE 0

define TRUE 1

typedef struct NODE
{
struct NODE *link;
int value;
} Node;

//该版本的插入程序不能处理插入元素在第一个节点的情况,想要插入到第一个元素,那么就必须修改根节点的指向
/*
int
sll_insert(Node *current,int new_value)
{
Node *previous;
Node *new;
// 寻找正确的插入位置,方法是按照链表顺查找,直到其值大于或者等于
// inch插入节点的值
while(current->value < new_value)
{
previous = current;
current = current->link;
}

// 上边的while循环可以遍历链表找到比待插入值要插入的位置,但是万一要是这个链表不是顺序的,这样可以吗?
// 比如1-5-15-3-12-14,这样插入13,会是什么样?直接插入到了15前面。
new =(Node*) malloc(sizeof(Node));
if(new == NULL)
return FALSE;
new->value = new_value;

//插入链表new->link = current;previous->link = new;return TRUE;

}
*/

//版本2:可以进行链表头插入,在版本1基础上实现,就是把root几点传给函数,利用指向指针的指针进行
int
sll_insert(Node **rootp,int new_value)
{
Node *current;
Node *previous;
Node *new;

// 将传递进来的根节点传递给函数内临时变量,该变量表示正在操作的变量
current = *rootp;
// 在此进行链表的遍历,找到可以插入的节点
while(current != NULL && current->value > new_value)
{
previous = current;
current = current->link;
}

//    找到要插入的位置,为要插入的值分配内存new = (Node*)malloc(sizeof(Node));if(new == NULL)    return FALSE;else    new->value = new_value;//将分配好的节点插入到链表中,这个时候需要判断插入的位置是不是首节点new->link = current;if(previous == NULL)    *rootp = new;else    previous->link = new;return TRUE;

}

int main()
{
Node root3 = {0,15};
Node root2 = {&root3,12};//Node *root2 = {root3,12};这样赋值时不对的,是因为两个结构体不能直接用赋值操作吗?
Node root1 = {&root2,13};
Node root = {&root1,2};
Node *rooter1 = &root;
Node **rooter2 = &rooter1;//关于指向指针的指针的初始化的问题,不能使用int a=1;int *ptr_i = &(&a);这样的声明,为什么,
// 因为在我们取完地址后&a就是一个右值,在内存中并没有存储地址,只是一个类似常量1的表达式,所以不能再对其进行取地址操作。
int result;
result = sll_insert(rooter2,1);
printf(“result = %d,Hello world!\n”,result);
return 0;
}

0 0
原创粉丝点击