单链表的基本操作

#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int Datatype;
typedef struct LNode{
    Datatype data;
    struct LNode *next; 
}LNode,*LinkList;//新节点 
LNode *MakeNode(Datatype e){
	LNode *s = (LNode*)malloc(sizeof(LNode));
	if(s != NULL){
		s->data = e;
	}
	return s;
	
}
Status InitList_L(LinkList &L){
	L = MakeNode(0);
	if(L == NULL){
		printf("存储空间分配失败"); 
	}
	L->next = NULL;
	return 1;
}
void PrintfList(LinkList L){
	printf("L ");
	LNode *p = L;
	while (p->next != NULL){
		p = p->next;
		printf("=>%d",p->data);//p->data 只是一个元素 
	} 
	printf("=>NULL");
}

Status ListInsert(LinkList &L,int i,Datatype e){//第i个节点插入 
	int count = 0;
	LNode *p = L;
	while(p->next != NULL&&count<i-1) {
		p = p->next;
		count++;
	}
	
	//找到插入位置退出,在i处插入,则用p = i-1->next来代表插入位置 
	if(p == NULL || count > i-1){
		return 0;
	} 
	LNode *s = MakeNode(e); //此处s与l同义 
		if(s == NULL){
		printf("存储空间分配失败"); 
		
	}
	s->next = p->next;//让p的后继只向头结点 
	p->next = s; //将新增的s链接到p后,s头结点,无值,没意义 
	return 1;
}
Status ListDelete(LinkList &L,int i,Datatype e){
	int count = 0;
	LNode *p = L;
	while(p->next != NULL&&count<i-1) {
		p = p->next;
		count++;
	}
	if(p == NULL || count > i-1){
		return 0;
	} 
	LNode *q = p->next;
	p->next = q->next;//让元素i的前驱与后继相链接 
	e = q->data;
	return 1;
}
void ListFind_L(LinkList &L,int i,Datatype e) {
	LNode *p = L;
	int count = 1;
	while(p->next != NULL && p->data != i ){
	count++;
	p = p->next;
}
	if(p->data == i){
		printf("在第%d的位置上\n",count);
	}else{
		printf("没有查到\n");
	}

}
int main(){
	LinkList L;
	puts("*****inited*****");
	InitList_L(L);
	PrintfList(L);
	int a[5];
	puts("\n请输入5个数"); 
	for(int i = 0;i<5;i++){
		scanf("%d",&a[i]);
	}
	for(int i = 0;i<5;i++){
		ListInsert(L,i+1,a[i]);
	}
	puts("\n******insert*****");
	PrintfList(L);
	puts("\n请输入要插入的一个数");
	int count,address,address1;
	scanf("%d",&count);
	puts("\n请输入要插入到第几个位置");
	 scanf("%d",&address);
	 ListInsert(L,address,count);
	 PrintfList(L);
	 Datatype e;
	 puts("\n******delete*****");
	 puts("\n请输入要删除第几个位置数");
	 scanf("%d",&address1);
	 ListDelete(L,address1,e);
	 puts("\n删除后为:");
	 PrintfList(L);
	 puts("\n******find*****");
	 puts("\n输入你要查找的数");
	 int find;
	 scanf("%d",&find); 
	 ListFind_L(L,find,e);
	 //puts("%d在第%d的位置上\n",find,address2);
	 //ListFind_L(LinkList &L,int i,e);
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哩吇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值