• c语言数据结构分析2之 链表插入删除


    #include <stdlib.h>
    #include <stdio.h>
    struct test{
    	int value;
    	struct test *next;
    };
    struct test* create(){ //创建create 函数,返回 struct test* 结构指针 返回的是头部指针
    	test *head,*tail,*p;
    	head=tail=NULL;
    	//head 是保存头部指针,p是当前指针,tail是临时替换的指针,是用来过度的
    	int i;
    
    	for(int j=0;j<4;j++)
    	{
    		scanf("%d",&i);
    		//(数据类型)malloc(sizeof(数据类型)) 动态分配内存,一定要记得用free() 消毁
    		p=(struct test*)malloc(sizeof(struct test)); //创建结构并开屁空间
    		p->value=i;
    		p->next=NULL;
    
    		if(head==NULL)
    		{
    			head=tail=p;		//保存头部指针
    		}
    		else{
    			tail=tail->next;	//第二次set tail->next 有值了 相当于移动两个变量 的指针			
    		}
    		tail->next=p;			//当前指针追加在未尾;
    	}
    
    	return head;
    };
    
    struct test* insert(struct test* ar,int a,int b)	//添加记录函数
    {
    	// a 是查找的元素,b是要插入的元素 ar 是处理的结构
    	struct test *p,*q,*s;
    	s=(struct test*)malloc(sizeof(struct test));
    	s->value=b;
    
    	if(ar==NULL)	//空表时直接返回 
    	{
    		ar=s;
    		s->next=NULL;
    	}
    	
    	if(ar->value==a)//查找替换的元素是头部的话,直接替换指针
    	{
    		s->next=ar;
    		ar=s;
    	}else{			//否则遍历查找
    		p=ar;
    		while(p->value!=a && p->next!=NULL)	//当找到 a 值的话,while就结束了
    		{
    			q=p;	//保存 最后一次循环的p
    			p=p->next;
    		}
    		if(p->value==a)	//循环后的指针	
    		{
    			q->next=s;  //p 已经是保存下一次p的指针了 所以p 的上一次指针是 q
    			s->next=p;
    			
    		}else		//否则就追加在后面
    		{
    			p->next=s;
    			s->next=NULL;
    		}
    	}
    
    	
    	return ar;
    }
    struct test* del(struct test* ar,int n)  //删除记录函数
    {
    	struct test *q,*p;
    	if(ar==NULL)
    		printf("the table is null\n");
    	else if(ar->value==n)
    	{
    		ar=ar->next;
    	}else
    	{
    		p=ar;
    		while(p->next!=NULL && p->value!=n)
    		{
    			q=p;
    			p=p->next;
    		}
    		if(p->value!=n)
    			printf("no the num\n");
    		else
    		{
    			q->next=p->next;
    			free(p);
    		}
    	}
    
    	return ar;
    }
    
    void showDate(struct test* p)  //显示记录函数
    {
    	while (p)
    	{		
    		printf("%d\n",p->value);
    		p=p->next;
    	}
    }
    int main(int argc, char* argv[])
    {
    
    	struct test *p,*head;
    	int a,b,d;
    	head=NULL;
    	p=create();
    	head=p;
    	showDate(p);	
    
    	printf("num\n");	//插入操作
    	scanf("%d",&a);
    	printf("insert num\n");
    	scanf("%d",&b);
    
    	p=insert(head,a,b);
    	head=p;//再次保存修改后的数据
    	printf("new p\n");
    	showDate(p);
    
    	printf("del num\n");	//删除操作
    	scanf("%d",&d);
    	p=del(head,d);
    	showDate(p);
    
    	return 0;
    }
      
    

      

  • 相关阅读:
    P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II
    P4887 【模板】莫队二次离线(第十四分块(前体))
    SP20644 ZQUERY
    企业战略管理【0612】
    管理经济学【0812】
    商务沟通[0664]
    国际企业管理【0813】
    社区管理【0272】
    战略管理【1059】
    管理沟通【1279】
  • 原文地址:https://www.cnblogs.com/solq/p/2138103.html
Copyright © 2020-2023  润新知