头插法和插入,删除操作

#include <stdio.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *Next;
}NOde,*LinkedList;
/*
打印线性表L
*/
void exhibit(LinkedList L)
{
while(L->Next!=NULL)
{
printf("%d",L->Next->data);
}
}
/*
要玩线性表,必须先有一个线性表,下面的代码用于创建一个线性表
LinkedList &L 其中的&并不表示去地址。而是表示引用,即这个函数最终可以改变l的值。
此处为头插法,但是头插法得到的链表和输入的数据相反。即第一输入输入数据却到了链表的尾部。
*/
void creatList_l(LinkedList &L,int n)
{
LinkedList p;
L = (LinkedList)malloc(sizeof(Node));//创建头指针
L->Next=NULL;
for(int i = n;i>0;i--)//由于i>0所以此时并没有存储0元素。所以如果n=3的时候,就相当于存储了1,2,3
{
p=(LinkedList)malloc(sizeof(Node));
p->data=i;
p->Next=L->Next;
L->Next=p;



}




}
int getElement(LinkedList L,int i,int &e)
{
LinkedList p;
p = L->Next;//让p指向第一个节点。即跳过头结点
int j  = 1;
while(p&&j<i)
{
p = p->Next;
j++;
}
if(!p||j>i)
return -1;
else
e = p->data;
return e;
}
/*
单链表的插入操作
*/
int  insert(LinkedList &L,int i,int x)
{
int j;
LinkedList p1 = L->Next;//跳过头节点,直接让p1指向第一个节点。所以我们认为链表是从1号元素开始的。
LinkedList p2 = (LinkedList)malloc(sizeof(Node));//为将要插入烦人元素开辟空间
p2->data=x;
for(j=1;j<i-1;j++)
{
p1 = p1->Next;//比如要在第三个位置插入元素,则只需要指针移动到第二个元素,就可以了
}
if(p1||j>=i-1)
{
return 0;
}
p2->Next=p1->Next;
p1->Next=p2;
return 1;
}
/*
单链表的删除操作
*/
int deleted(LinkedList &L,int i,int *e)
{

int j=1;
LinkedList p1 = L,p2;
while(j<i&&p1)
{
++j;
p1=p1->Next;
}
*e=p1->Next->data;
p2=p1->Next;
p1->Next=p2->Next;
free(p2);
return 1;
}
void main()
{
LinkedList L;//定义一个结构体指针L,相当于头节点L。
int n = 10, i = 3,e,x1,x2;
creatList_l(L,n);//通过这一堆调用,函数的头结点的指针L有了数值,
// exhibit(L);

insert(L,3,99);
x1 = getElement(L,i,e);
printf("%d\n",x1);
deleted(L,4,&x2);
printf("%d\n",x2);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值