用C语言编程(在Tubor c++环境下编译)

对单链表操作验证要求(1)用头插法(或尾插法)建立带头结点的单链表;(2)对已建立的单链表实现插人、删除、查找等基本操作

第1个回答  2013-12-29
TC调试通过,使用头插法建立的链表,包含了删除,查找和插入的操作:

#include <stdio.h>
#include <stdlib.h>

typedef struct _list {
int val;
struct _list* next;
} *node, list;

node Insert( node* head, node pos, int val )
{
node tmp;
tmp = ( node )malloc( sizeof( list ) );
tmp->val = val;
tmp->next = pos ? pos->next : *head;
if ( pos ) {
pos->next = tmp;
} else {
*head = tmp;
}
return tmp;
}

node Find( node head, int n ) {
if ( !head )
return NULL;
while ( head->val != n ) {
head = head->next;
}
return head;
}

node Create( int* beg, int* end )
{
node head, t;
head = t = NULL;
while ( beg != end ) {
t = Insert( &head, t, *beg++ );
}
return head;
}

void Remove( node* head, node n )
{
node prev, next;
prev = next = *head;
while ( next != n ) {
prev = next;
next = next->next;
}
if ( prev == *head ) {
*head = next->next;
} else {
prev->next = next->next;
}
free( next );
}

void Print( node head )
{
while ( head ) {
printf( "%d ", head->val );
head = head->next;
}
putchar( '\n' );
}

void Del( node head )
{
node tmp;
while ( head ) {
tmp = head;
head = head->next;
free( tmp );
}
}

int main()
{
int a[] = { 6,1,3,9,2,8,5,0,7,4 };
node head, pos;
head = Create( a, a + 10 );
Print( head );
pos = Find( head, 2 ); /* find node with value 2 */
Insert( &head, pos, 999 ); /* insert 999 after this node */
Remove( &head, pos->next->next ); /* remove node with value 8 */
Print( head );
Del( head ); /* free list */
getchar();
return 0;
}
第2个回答  2013-12-29
链表ln->next = l->head->next; l->head->next = n; //节点n的头插p = l->head; while(p->next) p = p->next ; p->next = n; n->next = NULL ;//节点n 尾插n->next = p->next ; p->next = n ; //将n插入p后边p = l->head ; while(p->next!=n) p=p->next ; p->next = n->next ; delete n; n = NULL ; //删除表中的结点np=l->head->next ; while(p){ //判断p是否符合条件; p=p->next} //查找
相似回答
大家正在搜