WEB开发网
开发学院软件开发C++ 链表的运算(02) 阅读

链表的运算(02)

 2008-03-08 12:44:11 来源:WEB开发网   
核心提示:3.链表节点的插入4.链表节点的删除3.链表节点的插入解: 1) 首先声明一个新节点供输入要插入节点的内容 2) 由用户输入一个节点内容(Key),表示欲插入在哪一个节点之后 3) 持续往下一个节点,链表的运算(02),直到节点内容Key或节点指针为NULL为止(即找不到该节点) 4) 假如该节点不存在,则插入
3.链表节点的插入
4.链表节点的删除



3.链表节点的插入
解:
   1) 首先声明一个新节点供输入要插入节点的内容
   2) 由用户输入一个节点内容(Key),表示欲插入在哪一个节点之后
   3) 持续往下一个节点,直到节点内容Key或节点指针为NULL为止(即找不到该节点)
   4) 假如该节点不存在,则插入在节点前
    New->Next=Head
    Head=New
   5) 假如找到该节点,则
     New->Next=Pointer->Next
     Pointer->Next=New
*程序代码如下:
#include<stdlib.h>
#include<stdio.h>
#define Max 10
strUCt List       /*节点结构声明*/
{
   int Number;
   int Total;
   struct List *Next;
};
typedef struct List Node;
typedef Node *Link;
int Data[2][Max]={1,3,5,7,2,4,6,8,9,0,15,35,10,67,25,65,38,70,30,20};
/*插入节点至链表内*/
Link Insert_List(Link Head,Link New,int Key)
{
   Link Pointer;     /*声明节点*/
   Pointer=Head;     /*Pointer指针设为首节点*/
   while(1)
   {
     if(Pointer==NULL)   /*插入在首节点前*/
     {
       New->Next=Head;
       Head=New;
       break;
     }
     if(Pointer->Number==Key)   /*插入在链表中间或尾端*/
     {
       New->Next=Pointer->Next;
       Pointer->Next=New;
       break;
     }
     Pointer=Pointer->Next;   /*指向下一个节点*/
   }
   return Head;
}
/*输出链表数据*/
void PRint_List(Link Head)
{
   Link Pointer;     /*节点声明*/
   Pointer=Head;     /*Pointer指针设为首节点*/
   while(Pointer!=NULL)  /*当节点为NULL结束循环*/
   {
    printf("[%d,%d]",Pointer->Number,Pointer->Total);
    Pointer=Pointer->Next;  /*指向下一个节点*/
   }
   printf("\n");
}
/*释放链表*/
void Free_List(Link Head)
{
   Link Pointer;     /*节点声明*/
   while(Head!=NULL)   /*当节点为NULL结束循环*/
   {
     Pointer=Head;
     Head=Head->Next;
     free(Pointer);
   }
}
/*建立链表*/
Link Create_List(Link Head)
{
   Link New;     /*节点声明*/
   Link Pointer;   /*节点声明*/
   int i;
   Head=(Link)malloc(sizeof(Node));   /*分配内存*/
   if(Head==NULL)
     printf("Memory allocate Failure!\n");   /*内存分配失败*/
   else
   {
     Head->Number=Data[0][0];     /*定义首节点数据编号*/
     Head->Total=Data[1][0];
     Head->Next=NULL;
     Pointer=Head;     /*Pointer指针设为首节点*/
     for(i=1;i<Max;i++)
     {
       New=(Link)malloc(sizeof(Node));   /*分配内存*/
       New->Number=Data[0][i];
       New->Total=Data[1][i];
       New->Next=NULL;
       Pointer->Next=New;     /*将新节点串连在原列表尾端*/
       Pointer=New;       /*列表尾端节点为新节点*/
     }
   }
   return Head;
}
/*主程序*/
void main()
{
   Link Head;     /*节点声明*/
   Link New;
   int Key;
   Head=Create_List(Head);   /*建立链表*/
   if(Head!=NULL)
   {
     Print_List(Head);  
     while(1)
     {
       printf("Input 0 to Exit\n");   /*数据输入提示*/
       New=(Link)malloc(sizeof(Node));   /*分配内存*/
       printf("Please input Data number:");
       scanf("%d",&New->Number);
       if(New->Number==0)     /*输入0时结束循环*/
         break;
       printf("Please input the data total:");
       scanf("%d",&New->Total);
       printf("Please input the data number for Insert:");
       scanf("%d",&Key);
       Head=Insert_List(Head,New,Key);   /*插入节点*/
       Print_List(Head);         /*输出链表数据*/
     }
     Free_List(Head);     /*释放链表*/
   }
}
*程序运行结果如下:

[1] 

Tags:运算

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接