我是初学的,高手帮个忙哈
连表的插入与删除算法(用C语言编写,简单点好不,怕看不懂)高手帮个忙哈
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*Linklist;
//*********************************************************链表创建函数
int creat (Linklist &L,int n)
{
Lnode *p;
p=(Linklist)malloc(sizeof (Lnode)); //
p->data=n;
p->next=L;
L=p;
return 1;
}
//******************************************************删除函数部分
int del (Linklist &p,int n)
{
int i;
Lnode *q;
for(i=1;i<n-1;i++)
p=p->next; //找到删除元素前一个节点
printf("要删除的节点对应数据是 %d\n",p->next->data);
q=p->next; //将要删除的元素赋给q
p->next=q->next;
free(q); //释放q节点
return 1;
}
//*********************************************************************插入函数部分
int insert (Linklist &L1,Lnode *p,int m)
{
int i;
for(i=1;i<m-1;i++)
L1=L1->next; //找到要插入节点位置前一个节点
p->next=L1->next;
L1->next=p;
return 1;
}
//*******************************************************************主函数部分
int main()
{
int flag=0;
int data;
int i; //作为计数器
int num; //链表的总长度
int del_num,insert_num; //要删除插入节点的序列号
Lnode *newnode; //创建等待插入节点
Lnode *L1;
//Lnode *ceshi;
Linklist L;
L=newnode=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;
//*************************************************开始创建链表
printf("请输入链表长度(int):\n");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
printf("请输入节点数据(整数):\n");
scanf("%d",&data);
creat(L,data);
}
/********************************************************************测试时使用此语句
ceshi=L;
printf("你创建的链表是:\n");
while(!(ceshi->next==NULL))
{
printf(" %d ",ceshi->data);
ceshi=ceshi->next;
}
printf("\n");
printf("创建链表成功!\n");
printf("****************************");
*/
//***************************************************************************删除部分
while(flag==0)
{
printf("\n请输入要删除节点的序列号:\n");
scanf("%d",&del_num);
if(del_num<=1||del_num>=num)
printf("输入有误(你不能删除首节点和尾节点)!");
else
flag=1;
}
L1=L; //防止更改L
del(L1,del_num);
printf("删除节点后的链表是:\n");
L1=L; //防止更改L
while(!(L1->next==NULL))
{
printf(" %d ",L1->data);
L1=L1->next;
}
printf("\n\n");
//********************************************************************调用插入函数
printf("请输入要插入节点的数据部分(int型):\n");
scanf("%d",&data);
newnode->data=data;
printf("\n请输入insert_num的值(int型):\n");
printf("新节点将被插入在你输入节点号对应节点的后面!\n");
scanf("%d",&insert_num);
printf("节点将被插在第%d个节点之后!\n",insert_num);
L1=L;
insert(L1,newnode,insert_num);
printf("\n插入新节点后的链表是:\n");
L1=L;
for(i=1;i<=num;i++)
{
printf(" %d ",L1->data);
L1=L1->next;
}
printf("\n\n");
return 1;
}