双向链表插入删除
2008-07-15 09:29
393 查看
#include <stdio.h>
#include <stdlib.h>
typedef struct node_t {
int data;
struct node_t* prev;
struct node_t* next;
} node;
node* init( void )
{
node* p;
p = (node *)malloc(sizeof(node));
if( p == NULL ) {
printf("malloc error\n");
return 0;
}
p->prev = NULL;
p->next = NULL;
p->data = 0;
return p;
}
/* insert a new node after specified postion, postion 0 is available */
int insert_node( node* head, int pos, int data )
{
node* p;
node* q;
if ( head == NULL || pos < 0 ) {
printf("parameter error\n");
return -1;
}
q = head;
while ( pos-- > 0 && q != NULL ) {
q = q->next;
}
if ( q == NULL ) {
printf("parameter error\n");
return -1;
}
p = (node *)malloc(sizeof(node));
if( p == NULL ) {
printf("malloc error\n");
return -1;
}
p->prev = q;
p->next = q->next;
p->data = data;
/* Is the last node ? */
if ( q->next )
q->next->prev = p;
q->next = p;
return 0;
}
/* insert a new node after specified postion */
int remove_node( node* head, int pos )
{
node* q;
if ( head == NULL || pos <= 0 ) {
printf("parameter error\n");
return -1;
}
q = head;
while ( pos-- > 0 && q != NULL ) {
q = q->next;
}
if ( q == NULL ) {
printf("parameter error\n");
return -1;
}
q->prev->next = q->next;
/* Is the last node ? */
if ( q->next )
q->next->prev = q->prev;
free( q );
return 0;
}
void print_node( node* head )
{
node* p;
p = head->next;
while ( p ) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main( void )
{
node* head;
int n = 5;
head = init();
while ( n > 0 ) {
insert_node( head, 0, n );
n--;
}
print_node( head );
insert_node( head, 10, 10);
insert_node( head, 0, 0);
print_node( head );
insert_node( head, 6, 6);
print_node( head );
remove_node( head, 0 );
remove_node( head, 10 );
remove_node( head, 6 );
print_node( head );
remove_node( head, 6 );
print_node( head );
return 0;
}
#include <stdlib.h>
typedef struct node_t {
int data;
struct node_t* prev;
struct node_t* next;
} node;
node* init( void )
{
node* p;
p = (node *)malloc(sizeof(node));
if( p == NULL ) {
printf("malloc error\n");
return 0;
}
p->prev = NULL;
p->next = NULL;
p->data = 0;
return p;
}
/* insert a new node after specified postion, postion 0 is available */
int insert_node( node* head, int pos, int data )
{
node* p;
node* q;
if ( head == NULL || pos < 0 ) {
printf("parameter error\n");
return -1;
}
q = head;
while ( pos-- > 0 && q != NULL ) {
q = q->next;
}
if ( q == NULL ) {
printf("parameter error\n");
return -1;
}
p = (node *)malloc(sizeof(node));
if( p == NULL ) {
printf("malloc error\n");
return -1;
}
p->prev = q;
p->next = q->next;
p->data = data;
/* Is the last node ? */
if ( q->next )
q->next->prev = p;
q->next = p;
return 0;
}
/* insert a new node after specified postion */
int remove_node( node* head, int pos )
{
node* q;
if ( head == NULL || pos <= 0 ) {
printf("parameter error\n");
return -1;
}
q = head;
while ( pos-- > 0 && q != NULL ) {
q = q->next;
}
if ( q == NULL ) {
printf("parameter error\n");
return -1;
}
q->prev->next = q->next;
/* Is the last node ? */
if ( q->next )
q->next->prev = q->prev;
free( q );
return 0;
}
void print_node( node* head )
{
node* p;
p = head->next;
while ( p ) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main( void )
{
node* head;
int n = 5;
head = init();
while ( n > 0 ) {
insert_node( head, 0, n );
n--;
}
print_node( head );
insert_node( head, 10, 10);
insert_node( head, 0, 0);
print_node( head );
insert_node( head, 6, 6);
print_node( head );
remove_node( head, 0 );
remove_node( head, 10 );
remove_node( head, 6 );
print_node( head );
remove_node( head, 6 );
print_node( head );
return 0;
}
相关文章推荐
- 如何使用c语言实现双向链表的插入删除操作
- 双向循环链表的插入与删除
- 实现双向链表删除一个节点P,在节点P后插入一个节点
- 双向链表的创建、结点的插入、删除与打印
- 双向链表的创建/插入/删除
- C语言---双向链表的插入、删除、查找操作
- 用c语言完成一个双向链表的创建,插入,删除
- 双向链表建立、插入删除
- 如何实现双向链表的插入、删除操作
- 双向循环链表的插入和删除
- 利用模板类编写一个程序,实现双向链表的插入、删除、查找、显示的功能。
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- 双向非循环递增链表——插入,删除,清空
- (三)双向链表的初始化、插入和删除
- java建立双向链表,插入结点,删除节点
- 双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等
- [原]C语言实现双向链表删除节点、插入节点、双向输出等操作
- 双向链表的插入和删除