线性表的链式表示和实现

线性表的链式存储

单链表结点类型定义

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*Linklist;//之后便可用与定义其他结点

eg: LNode *p,*pre;
或者 Linklist p, l;

申请存储单元

LNode *p;
p=new LNode;   
delete p;  释放结点。

链表的输出

void out(Linklist L)
{
    LNode *p;  //工具指针
    p=L->next;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
}

链表的递归遍历

void out1(Linklist L)  //正序,从前往后输出
{if(p)
	{
	cout<<p->data;
	out1(p->next);
	}
}

void out2(Linklist L)  //逆序,从前往后输出
{if(p)
	(
	out2(p->next)
	cout<<p->data;
	}
}

链表的插入和创建

两种插入

1、结点p后插入

void Insert1(Linklist L,LNode *p, int x)
{
	LNode *s;
	s=new  LNode;  //创建新结点
	s->data=x;
	s->next=p->next;
	p->next=s;
}

2、结点p前插入 //需要找到p的前驱pre,在pre之后插入结点

void  Insert2(Linklist L,LNode *p,int s)
{
	LNode *s,*pre; 
	***pre=L;***  //开始查找p的前驱pre;
	while(pre->next!=NULL&pre->next!=p)
		pre=pre->next;
	if(pre->next==NULL) 
	{
		cout<<"p不存在 "//也可以在p之后插入,再交换p和p->next的值
		return;				  	
	}
	s=new  LNode;
	s->data=x;
	s->next=pre->next;
	pre->next=s;
}

两种创建
1、头插法

void createList_H(Linklist &L,int n)  //头插法
{
    L=new LNode;
    L->next=NULL;
   LNode *p;
    for(int i=0;i<n;i++)
    {
        p=new LNode;
        cin>>p->data;
        p->next=L->next;
        L->next=p;
    }
}

输入数据后,往第一个位置插入,所以数据为倒序
如图:
在这里插入图片描述
2、尾插法

void createList(Linklist &L,int n)   //尾插法
{
    L=new LNode;
    L->next=NULL;
    LNode *r;
    LNode *p;
    r=L;
    for(int i=0;i<n;i++)
    {
        p=new LNode;
        cin>>p->data;
        p->next=NULL;
        r->next=p;
        r=p;
    }
}

输入数据往尾部插入,所以为正序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值