线性表的链式存储结构

线性表的链式存储结构

#include<iostream>
using namespace std;

typedef int ElementType; 
typedef struct LNode* List;
struct LNode{
	ElementType data;
	List Next;
};

LNode L;
List PtrL;

//线性表的链式存储的操作集
//1.求表长
int Length(List L); 
//2.查找第Kth位序的元素
List FindKth(int K, List PtrL); 
//3.按值查找
List Find(ElementType X,List PtrL); 
//4.插入(在第i-1(1<=i<=n+1)个节点插入一个值为X的新节点
List Insert(ElementType X,int i,List PtrL);
//5.删除(删除链表的第i(1<=i<=n)个位置上的节点)
List Delete(int i,List PtrL); 
int main(){
	int i=20,j=1;
	PtrL=NULL;
	List p=PtrL;
	while(i--){
		p=Insert(i,j++,p);
	}
	p=Delete(19,p);
	List s=p;
	while(s){
		cout<<s->data<<endl; 
		s=s->Next;
	} 
	return 0;
} 

int Length(List L){
	List p=L;
	int i=0;
	while(p){
		p=p->Next;
		i++;
	}
	return i;
}
//无法0判断输入的K是否合法所以不能将判断条件(i==k)改为if(p)或直接return p; 
List FindKth(int K, List PtrL){
	List p=PtrL;
	int i=1;
	while(p!=NULL&&i<K){
		p=p->Next;
		i++;
	}
	if(i==K)return p;    //找到了返回第k个指针 
	else return NULL;    //没找到返回空指针 
}

List Find(ElementType X,List PtrL){
	List p=PtrL;
	while(p&&p->data!=X){
		p=p->Next;
	}
	return p;
}

List Insert(ElementType X,int i,List PtrL){
	List p,s;
	if(i==1){  //在表头插入 
		s=(List)malloc(sizeof(LNode));
		s->data=X;
		s->Next=PtrL;
		return s;
	}
	p=FindKth(i-1,PtrL);
	if(p==NULL){   //若未找到插入的位置 
		printf("参数i错误");
		return NULL;
	}else{         //找到了插入的位置 
		s=(List)malloc(sizeof(LNode));
		s->data=X;
		s->Next=p->Next;
		p->Next=s;
		return PtrL; 
	} 
	
}

List Delete(int i,List PtrL){
	List p,s;
	if(i==1){
		s=PtrL;
		if(PtrL!=NULL)PtrL=PtrL->Next;
		else return NULL;
		free(s);
		return PtrL; 
	}
	p=FindKth(i-1,PtrL);
	if(p==NULL){
		printf("第%d个节点不存在",i-1);return NULL;
	}else if(p->Next==NULL){
		printf("第%d个节点不存在",i);return NULL;
	}else{
		s=p->Next;
		p->Next=s->Next;
		free(s);
		return PtrL; 
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值