正文

单向链表的插入、查找和遍历方法2006-03-25 15:23:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ljqy/11382.html

分享到:

#include<stdio.h>
#include<conio.h>

#define N 3

int Link_Length = N; //记录链表的长度

//定义结构体
struct  t_node
{
  int data;
  struct t_node *next;
};

义别名
typedef struct  t_node Node;

//定义链表变量
Node  * example_link = NULL;


/*
*功能:获取指定位置的节点的地址
*输入:plink=链表,i=索引位置,从零开始
*输出:无
*返回值:索引节点的地址
*/
Node * get(Node *plink,int i)
{

  if(NULL == plink)
     return NULL;
  int count = 0;
  Node * pNext = plink; 
  while(count<i && pNext != NULL)
  {
    count++;
    pNext = pNext->next;
  }
  return pNext;
}//endget()

/*
*功能:向指定链表中的指定位置前插入节点
*输入:plink=链表,x=新节点的值,i=插入位置
*输出:plink=插入节点后的新链表
*返回值:成功返回true, 否则为false
*/
bool Insert(Node *&plink,int x,int i)

   Node *s = NULL; //新节点
   Node *q = NULL; //中间变量

 //构建新节点
   s = (node *)malloc( sizeof(node) ); 
   if( s == NULL )
        return false;
  
   s->data = x;
   s->next = NULL;

   if(i==0)//插入在头节点前
   {
       s->next = plink;
       plink = s;
    }
    else//插入在中间部位
    {//0        
       //获取需插入位置的节点
        q = get(plink,i-1);
        if( NULL==q )
    return false;
 
        s->next=q->next;
        q->next=s;
       
    }//endelse0

   return true;

}//endInsert()

/*
*功能:初始化链表
*输入:无
*输出:无
*返回值:无
*/
void Init_Link(void)

   Node *pNext = NULL;
   //头节点
   example_link = (Node *)malloc( sizeof(Node) ); 
   if(NULL == example_link)
       return;
   scanf("%d\n",&example_link->data);
   example_link->next = NULL;

  //中间节点
  pNext = example_link; //为游标赋值
  for(i=1,i<N,i++)
  {
    pNext->next = (Node *)malloc( sizeof(Node) ); 
     if(NULL == pNext->next)
       return;
    scanf("%d\n",&pNext->next->data);
    pNext->next->next = NULL;
    pNext = pNext->next; //移动游标
  }

}
main()
{
  int i,n;
  Node *pNext = NULL;

  //初始化链表
  Init_Link();

  //插入新节点
  Insert(example_link, 2, 1);/* 2为插入的元素值,1为插入的位置*/
  
   //节点数增加
   Link_Length++;

   if(NULL == example_link)
       return;
   /*/在该行前面加"/"则使用第一方法 
   //第一方法
   pNext = example_link;  
   for(i=0,i<Link_Length; i++)
   {
      printf("%d\n",pNext->data);
      pNext = pNext->next;
   }
   /*/
   //第二方法
   pNext = example_link;  
   while(pNext != NULL)
   {
      printf("%d\n",pNext->data);
      pNext = pNext->next;
   }
   //*/
   getch();

}//endmain()
 

阅读(3992) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册