链表--单链表

链表存取元素 顺序存取法

顺序表存取元素  随机存取 

#include<iostream> 
using namespace std;
 
typedef struct LNode{
	int data;
	LNode *next;
	
}LNode,*linkList;
//初始化
int InitList(linkList &L) {//带头结点的链表
	L=new LNode;
	L->next=NULL;
	return 1;	
}
//销毁单链表
int destroyList(linkList &L){
    LNode *p;
    while(L){
        p=L;
        L=L->next;
        delete p;
    }
    return 1;
}

//清空单链表
int ClearList(linkList &L){
    LNode *p,*q;
    p=L->next;
    while(p){
        q=p->next;
        delete p;
        p=q;
    }
    L->next=NULL;
    return 1;
}
//链表长
int lengthList(linkList L){
    LNode *p;
    int length=0;
    p=L->next;
    while(p){
        length++;
        p=p->next;
    }
    return length;
}
//查 第i个位置上的 
int GetElem(linkList L,int i,int &e) {
	LNode *p=L->next;
	int j=1;
	while(p&&j<i){
		p=p->next;
		j++;
	}
	if(!p||j>i) return 0;
	e=p->data;
	return 1;
}
//查 返回位置序号
int LocalElem(linkList L,int e){
    LNode *p=L->next;
    j=1;
    while(p&&p->data!=e){
        p=p->next;
        j++;
    }
    if(p) return j;
    else return 0;
}
//查 元素值为e的
LNode *GetElem(linkList L,int e) {
	LNode *p=L->next;
	while(p->data!=e&&p){
		p=p->next;
	}
	return p;
}
//插
int InsertELem(linkList &L,int i,int e) {//在第i个位置上插入e
	if(i<1) return 0;
	LNode *p=L;
	int j=0;
	while(j<i-1&&p) {
		p=p->next;
		j++; 
	}
	if(!p||j>i-1) return 0;
	LNode *s=new LNode;
	s->data=e;
	s->next=p->next;
	p->next=s;
	return 1; 
}
//删除
int DeleteElem(linkList &L,int i) {
	LNode *p=L,*q;
	if(i<1) return 0;
	int j=0;
	while(p->next&&j<i-1){
		p=p->next;
		j++;
	}
	if(!p||j>i-1) return 0;
	q=p->next;
	p->next=q->next;
	delete q;
	return 1;
}
//前插法创建   如abcde  先插e
void CreateList_H(linkList &L,int n) {//插入n个
	LNode *p;
	for(int i=0;i<n;i++) {
		p=new LNode;
		cin>>p->data;
		p->next=L->next;
		L->next=p;
	}
	
}
//后插法创建
void CreateList_R(linkList &L,int n) {
	LNode *r=L;
	while(r->next){
		r=r->next;
	}
	LNode *q;
	for(int i=0;i<n;i++){
		q=new LNode;
		cin>>q->data;
		q->next=NULL;
		r->next=q;
		r=q;
	}
	
}
//遍历 
void PrintList(linkList L){
	LNode *p=L->next;
	while(p){
		cout<<p->data<<" ";
		p=p->next; 
	}
	cout<<endl; 
}
main(){
	linkList L;
	InitList(L);
	
	CreateList_H(L,3);
	PrintList(L);
	
	CreateList_R(L,3);
	PrintList(L);
	
	
	InsertELem(L,1,8);
	PrintList(L);
	
	DeleteElem(L,1);
	PrintList(L);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值