源程序
typedef int Type;
typedef int Status;
struct Node
{
Type value;
struct Node *next ;
};
Status init(struct Node ** h);
Status insert_head(struct Node *head , Type value);
void print (struct Node *head );
Status insert_tail(struct Node *head , Type value);
int lenth(struct Node *head );
Status insert_index(struct Node *head , Type value, int index );
Status delete_index(struct Node *head , int index );
Status delete_value(struct Node *head , Type value);
Status update_index(struct Node *head , int index , Type value);
void update_value(struct Node *head , Type old_value, Type new_value);
Status query_index(struct Node *head , int index );
void query_value(struct Node *head , Type value);
int main()
{
int ret = 0 ;
int i;
struct Node *head ;
ret = init(&head);
printf (ret ? "initialize successfully\n" : "initialize failed\n" );
for (i = 0 ; i < 10 ; i++)
{
insert_head(head, i);
}
print (head);
for (i = 0 ; i < 10 ; i++)
{
insert_tail(head, i);
}
print (head);
printf ("%d \n" , lenth(head));
insert_index(head, 99 , 19 );
print (head);
delete_index(head, 19 );
print (head);
delete_value(head, 2 );
print (head);
update_index(head, 3 , -1 );
update_value(head, 6 , 66 );
print (head);
query_index(head, 3 );
query_value(head, 7 );
return 0 ;
}
Status init(struct Node ** h)
{
struct Node *newnode = (struct Node *) malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->value = 0 ;
newnode->next = NULL;
*h = newnode;
return T;
}
Status insert_head(struct Node *head , Type value)
{
struct Node *newnode = (struct Node *) malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->value = value;
newnode->next = head->next ;
head->next = newnode;
return T;
}
Status insert_tail(struct Node *head , Type value)
{
struct Node *newnode = (struct Node *) malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->value = value;
newnode->next = NULL;
while (head->next != NULL)
{
head = head->next ;
}
head->next = newnode;
return T;
}
Status insert_index(struct Node *head , Type value, int index )
{
if (0 == index || index > lenth(head))
{
printf ("out of range\n" );
return F;
}
struct Node *newnode = (struct Node *) malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
int i;
for (i = 0 ; i < index ; i++)
{
head = head->next ;
}
newnode->value = value;
newnode->next = head->next ;
head->next = newnode;
return T;
}
Status delete_index(struct Node *head , int index )
{
if (0 == index || index > lenth(head))
{
printf ("out of range\n" );
return F;
}
int i;
for (i = 0 ; i < index ; i++)
{
head = head->next ;
}
struct Node *tmp = head->next ->next ;
free(head->next );
head->next = tmp;
return T;
}
Status delete_value(struct Node *head , Type value)
{
int i, len;
len = lenth(head);
for (i = 0 ; i < len; i++)
{
// printf ("i = %d value = %d \n" , i, head->next ->value);
if (head->next ->value == value)
{
struct Node *tmp = head->next ->next ;
free(head->next );
head->next = tmp;
}
else
{
head = head->next ;
}
}
return T;
}
Status update_index(struct Node *head , int index , Type value)
{
if (index < 0 || index > lenth(head))
{
printf ("out of range\n" );
return F;
}
int i;
for (i = 0 ; i <= index ; i++)
{
head = head->next ;
}
head->value = value;
return T;
}
void update_value(struct Node *head , Type old_value, Type new_value)
{
while (head->next != NULL)
{
if (head->next ->value == old_value)
{
head->next ->value = new_value;
}
head = head->next ;
}
}
Status query_index(struct Node *head , int index )
{
if (index < 0 || index > lenth(head))
{
printf ("out of range\n" );
return F;
}
int i;
for (i = 0 ; i <= index ; i++)
{
head = head->next ;
}
printf ("index = %d value = %d \n" , index , head->value);
return T;
}
void query_value(struct Node *head , Type value)
{
int count = 0 ;
int index = 0 ;
while (head->next != NULL)
{
if (head->next ->value == value)
{
count++;
printf ("find %d : %d \n" , value, index );
}
head = head->next ;
index ++;
}
if (0 == count)
{
printf ("not found\n" );
}
}
void print (struct Node *head )
{
while (NULL != head->next )
{
printf ("%d " , head->next ->value);
head = head->next ;
}
printf ("\n" );
}
int lenth(struct Node *head )
{
int count = 0 ;
while (NULL != head->next )
{
count++;
head = head->next ;
}
return count;
}
运行结果