链表的运算(02)
关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享链表的运算(02)教程,希望对大家能有一点小小的帮助。
4.链表节点的删除
3.链表节点的插入
解:
1) 首先声明一个新节点供输入要插入节点的内容
2) 由用户输入一个节点内容(Key),表示欲插入在哪一个节点之后
3) 持续往下一个节点,直到节点内容Key或节点指针为NULL为止(即找不到该节点)
4) 假如该节点不存在,则插入在节点前
New-Next=Head
Head=New
5) 假如找到该节点,则
New-Next=Pointer-Next
Pointer-Next=New
*程序代码如下:
#includestdlib.h
#includestdio.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("");
}
/*释放链表*/
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!"); /*内存分配失败*/
else
{
Head-Number=Data[0][0]; /*定义首节点数据编号*/
Head-Total=Data[1][0];
Head-Next=NULL;
Pointer=Head; /*Pointer指针设为首节点*/
for(i=1;iMax;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"); /*数据输入提示*/
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]