对单链表进行 删除、插入、排序 等操作。
2010-02-01 15:06
447 查看
#define FALSE 0
#define TRUE 1
typedef struct NODE{
struct NODE *link;
int value;
}NODE;
int length( NODE *head )
{
NODE *current;
int length = 0;
current = head;
while( current != NULL )
{
current = current->link;
length++;
}
return length;
}
NODE *create()
{
NODE *head, *p, *s;
int value, cycle = 1;
head = (NODE *)malloc( sizeof(NODE) );
p = head;
while( cycle )
{
printf( "/nPlease input the data:" );
scanf( "%d", &value );
if( value != 0 )
{
s = (NODE *)malloc( sizeof( NODE ) );
s->value = value;
printf("/n s->value = %d", s->value);
p->link = s;
p = s;
}
else
cycle = 0;
}
head = head->link;
p->link = NULL;
return head;
}
void print( NODE *head )
{
NODE *p = NULL;
int n = 0;
n = length( head );
printf( "/n Now, These %d records are:/n", n );
p = head;
while( p != NULL )
{
printf("/n p->value %d", p->value);
p = p->link;
}
printf("/n");
}
NODE *reserve( NODE *head )
{
NODE *p1, *p2, *p3;
printf("/nEntry reserve() ======= begin !!!!");
if( head == NULL || head->link == NULL )
return head;
p1 = head;
p2 = p1->link;
while( p2 )
{
p3 = p2->link;
p2->link = p1;
p1 = p2;
p2 = p3;
}
head->link = NULL;
head = p1;
printf("/nEntry reserve() ======= end !!!!");
return head;
}
int sll_insert( NODE **rootp, int new_value )
{
register NODE *current;
register NODE *_new;
printf("/nEntry sll_insert() ======= begin !!!!");
while( (current = *rootp) != NULL && current->value < new_value )
{
rootp = ¤t->link;
}
_new = (NODE *)malloc( sizeof(NODE) );
if( _new == NULL )
return FALSE;
_new->value = new_value;
_new->link = current;
*rootp = _new;
printf("/nEntry sll_insert() ======= end !!!!");
return TRUE;
}
NODE *del( NODE *head, int value )
{
NODE *p1, *p2;
p1 = head;
printf("/nEntry del() ======= begin !!!!");
while( p1->link != NULL && value != p1->value )
{
p2 = p1;
p1 = p1->link;
}
if( value == p1->value )
{
if( p1 == head )
{
head = p1->link;
free( p1 );
}
else
{
p2->link = p1->link;
free( p1 );
}
}
else
{
printf( "/n %d is could not been found", value );
return NULL;
}
printf("/nEntry del() ======= end !!!!");
return head;
}
NODE *sort( NODE *head )
{
NODE *p;
int temp;
int n;
int i, j;
printf("/nEntry sort() ======= begin !!!!");
n = length(head);
if( head == NULL || head->link == NULL )
return head;
for( j = 1; j < n; j++ )
{
p = head;
for( i = 0; i < n-j; i++ )
{
if( p->value > p->link->value )
{
temp = p->value;
p->value = p->link->value;
p->link->value = temp;
}
p = p->link;
}
}
printf("/nEntry sort() ======= end !!!!");
return head;
}
int main(void)
{
NODE *head = NULL;
NODE *_new = NULL;
NODE *returnp = NULL;
NODE *delp = NULL;
NODE *sortp = NULL;
int length = 0;
head = create();
print( head );
_new = reserve( head );
print(_new);
sll_insert( &_new, 100);
print( _new );
delp = del( _new, 4 );
print( delp );
sortp = sort(delp);
print( sortp );
return 0;
}
#define TRUE 1
typedef struct NODE{
struct NODE *link;
int value;
}NODE;
int length( NODE *head )
{
NODE *current;
int length = 0;
current = head;
while( current != NULL )
{
current = current->link;
length++;
}
return length;
}
NODE *create()
{
NODE *head, *p, *s;
int value, cycle = 1;
head = (NODE *)malloc( sizeof(NODE) );
p = head;
while( cycle )
{
printf( "/nPlease input the data:" );
scanf( "%d", &value );
if( value != 0 )
{
s = (NODE *)malloc( sizeof( NODE ) );
s->value = value;
printf("/n s->value = %d", s->value);
p->link = s;
p = s;
}
else
cycle = 0;
}
head = head->link;
p->link = NULL;
return head;
}
void print( NODE *head )
{
NODE *p = NULL;
int n = 0;
n = length( head );
printf( "/n Now, These %d records are:/n", n );
p = head;
while( p != NULL )
{
printf("/n p->value %d", p->value);
p = p->link;
}
printf("/n");
}
NODE *reserve( NODE *head )
{
NODE *p1, *p2, *p3;
printf("/nEntry reserve() ======= begin !!!!");
if( head == NULL || head->link == NULL )
return head;
p1 = head;
p2 = p1->link;
while( p2 )
{
p3 = p2->link;
p2->link = p1;
p1 = p2;
p2 = p3;
}
head->link = NULL;
head = p1;
printf("/nEntry reserve() ======= end !!!!");
return head;
}
int sll_insert( NODE **rootp, int new_value )
{
register NODE *current;
register NODE *_new;
printf("/nEntry sll_insert() ======= begin !!!!");
while( (current = *rootp) != NULL && current->value < new_value )
{
rootp = ¤t->link;
}
_new = (NODE *)malloc( sizeof(NODE) );
if( _new == NULL )
return FALSE;
_new->value = new_value;
_new->link = current;
*rootp = _new;
printf("/nEntry sll_insert() ======= end !!!!");
return TRUE;
}
NODE *del( NODE *head, int value )
{
NODE *p1, *p2;
p1 = head;
printf("/nEntry del() ======= begin !!!!");
while( p1->link != NULL && value != p1->value )
{
p2 = p1;
p1 = p1->link;
}
if( value == p1->value )
{
if( p1 == head )
{
head = p1->link;
free( p1 );
}
else
{
p2->link = p1->link;
free( p1 );
}
}
else
{
printf( "/n %d is could not been found", value );
return NULL;
}
printf("/nEntry del() ======= end !!!!");
return head;
}
NODE *sort( NODE *head )
{
NODE *p;
int temp;
int n;
int i, j;
printf("/nEntry sort() ======= begin !!!!");
n = length(head);
if( head == NULL || head->link == NULL )
return head;
for( j = 1; j < n; j++ )
{
p = head;
for( i = 0; i < n-j; i++ )
{
if( p->value > p->link->value )
{
temp = p->value;
p->value = p->link->value;
p->link->value = temp;
}
p = p->link;
}
}
printf("/nEntry sort() ======= end !!!!");
return head;
}
int main(void)
{
NODE *head = NULL;
NODE *_new = NULL;
NODE *returnp = NULL;
NODE *delp = NULL;
NODE *sortp = NULL;
int length = 0;
head = create();
print( head );
_new = reserve( head );
print(_new);
sll_insert( &_new, 100);
print( _new );
delp = del( _new, 4 );
print( delp );
sortp = sort(delp);
print( sortp );
return 0;
}
相关文章推荐
- 对链表进行创建、结点的删除和插入操作
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- 数据结构:单链表(二)之链表节点排序,升序插入数据,删除指定的所有节点,翻转链表操作
- 链表的基本操作(插入,删除,排序、逆置等)
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 数据结构链表的操作集合(建立,遍历,插入,删除,排序,长度,空判断等)
- 单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- java语言编写链表的基本操作(链表的创建,插入,删除,打印,排序)
- 数据结构之单向链表操作1-(插入,删除,交换,反转,排序等操作)
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 链表操作 对链表进行输入,插入,删除结点,按关键字进行查找操作 C语言
- Partition List(链表的插入和删除操作,找前驱节点)
- 用直接插入排序法对单链表进行排序
- 第一类:链表的考察(链表的插入,删除,排序和逆转等)
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- 利用dbcp数据库连接池连接数据库,并利用dbtuils框架对数据库test中book表进行插入、删除、修改、查询的操作代码
- 利用dbcp数据库连接池连接数据库,并利用dbtuils框架对数据库test中book表进行插入、删除、修改、查询的操作。
- 【程序员面试宝典】数据结构基础一单链表:创建|求长|插入|删除|排序|打印|逆置
- 链表(1)基本操作:创建,插入,删除,销毁等(模板类实现)
- 最大堆的插入/删除/调整/排序操作