数据结构 链表插入删除查找

#include <stdio.h>
#include <stdlib.h>
//定义一个结构体 
typedef struct Node{
    int data;
    
    struct Node *next;
}Node,* LinkList;

//链表的初始化操作 
void InitList(LinkList * L)
{
	(*L)=(LinkList)malloc(sizeof(Node));
	
	(* L)->next=NULL;
	
}
//采用头插法创建链表,所得链表与输出数据正好相反,如果想要得到顺序的话应该采用尾插法 
void CreateFromHead(LinkList L)
{
	int e;
	Node *s;
	int flag=1;
	printf("输入值");
	while(flag){
		//TODO
//		scanf用来获取用户输入数据 
		scanf("%d",&e);
//		如果用户输入的数据为-100的话代表输入结束 
		if(e == -100){
			//TODO
			flag = 0;
		}
		else{
//			创建一个s节点用来保存用户输入数据 
			s = (Node*)malloc(sizeof(Node));
//			存放在s的data域里面 
			s->data=e;
//			L->next也就代表第一个元素,然后s插在了第一个的前面头节点的后面 
			s->next=L->next;
			L->next=s;
			
		}
	}
		
//	
}

//在单链表查找第i个节点
Node * Get(LinkList L,int i){
 	int j;
 	Node * p;
 	if(i<=0){
	 	//TODO
	 	return NULL;
	 }
	 p=L;j=0;
	 while(p->next!=NULL&&j<i){
	 	//TODO
	 	p=p->next;
	 	j++;
	 	
	 }
	 if(i == j ){
	 	//TODO
	 	return p;
	 }else{
	 	return NULL;
	 }
}
//插入操作 
int InsList(LinkList L,int i,int e){
//	定义两个指针分别是pre和s 
	Node *pre,*s;
	int k;
//	判断非法输入 
	if(i<=0){
		//TODO
		return -1;
	}
	pre=L; k=0;
//	用来查找要插入节点的前一个节点 
	while(pre!=NULL&&k<i-1){
		//TODO
		pre=pre->next;
		k++;
		
	}
	if(pre==NULL){
		printf("插入位置不合理");
		return -1;		
	}
	s=(Node*)malloc(sizeof(Node));
	s->data=e;
	s->next=pre->next;
	pre->next=s;
//	这里为了测试,写死了插入位置和插入的值 
	printf("在3位置,插入4----");
	while(pre->next){
	pre=pre->next;
	
	return 1;
}
}
//display用来打印链表的值 
void display(LinkList *p){
	
    Node* temp=p;//将temp指针重新指向头结点
    
    //只要temp指针指向的结点的next不是Null,就执行输出语句。
    while (temp->next) {  	
    	
        temp=temp->next;
        printf("%d",temp->data);
    }
    printf("\n");
}
// 删除操作 
int DelList(LinkList L,int i){
	int e;
	printf("删除2位置");
	
	Node *pre,*r;
	pre=L;
	int k=0;
	while(pre->next!=NULL&&k<i-1){
		//TODO
		pre=pre->next;
		k++;
	}
	if(pre->next==NULL){
		//TODO
		printf("删除的位置不合理");
		return -1;
	}
	r=pre->next;
	pre->next=r->next;
	e=r->data;
	
	free(r);
	return e;			 
}
int main(){
		LinkList L;
		printf("执行初始化操作");				
		InitList(&L);
		CreateFromHead(L);
		display(L);
		InsList(L,3,4);
		display(L);
		DelList(L,2);
		display(L);				
		return 0;
}


 
 
 
 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值