数据结构 双链表存储(c程序 干货满满)

哈咯~ 今天的最后一题 

还是 大家先做一做  看看和我一不一样 

1.添加数据 (345)(cds)(5)(9.1)(0.4)(age)(name

2.删除第二个数据

3.将 (考试)插入在(5)后面

 

目录

粗略分析

        1.添加数据

        2.删除 第二个数据

       3.插入(考试)

细节分析

         1.遍历数据的类型   

         2.数字类型的打印

           3.字符串的比较

代码实现

操作演示

                 

 

结果显示



粗略分析

        1.添加数据

                这道题的数据有两类 数字 和 字符串 

                所有要定义一个结构体数组 题里的数据有 整型浮点型  为了兼容

                结构体就定义 flaot型 char型

                在进行双链表的操作

        2.删除 第二个数据

                这个题比较人性化 数据很少 第二个 一眼看过去就找到是(cds)   

                所有在删除前 先找删除

       3.插入(考试)

             (考试)插入在(5)后面还是

               先遍历再到(5)在插入     

细节分析

         1.遍历数据的类型   

                  这个数据有两个 一种是 数字 一种是 字符串 

                  它是什么类型打印什么类型 所有

                   第一个(345)让 float=345  char=NULL

                   第二个 (cds)让 float=0   char=cds

                   ...............

                  遍历的时候只要 float=0 就是字符串 打印char                                                                                                          float!=0   就是数字    打印float

                   这样就可以把 数字 和字符串分开打印 

         2.数字类型的打印

                  数字有(345)int型 和(9.1)flaot型

                  打印的时候还是要把他们分开 

                  这里给大家分析一个小技巧

                  定义一个和结构体数据里面一样的 float型的   让T等于结构体里的

                  在定义一个 int 型  让L=T  就把数据强制转化为int型 

                  然后 L/T 如果他们=1 就是int型 打印%d

                                如果等于1 就是float型 打印%f

           3.字符串的比较

                     字符串的比较和数字的比较不同 是用函数比较的 比如

                    char a[20]="xie"      char b[20]="qing"  if(a[20]==b[20])   是

                    我们用函数 strcmp 来比较  if(strcmp(a[20],b[20])==0)这才是判断字符串大小

代码实现

   

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct data   //结构体数据 
{
	float a;  //浮点型 
	char a1[20]; //字符串 
};

struct node   //结构体节点 
{
	struct data da;  //结构体数据 
	struct node*next; //后指针 
	struct node*front;//前指针 
};

struct node*head()
{
	struct node*headnode=(struct node*)malloc(sizeof(struct node)); //开辟空间 
    headnode->da.a=0;      //初始化 
    headnode->da.a1[20]="null";//初始化 
    headnode->next=NULL;
    headnode->front=NULL;
    return headnode;
}

struct node*newnode(struct data da)   //创建节点 
{
	struct node*newnode=(struct node*)malloc(sizeof(struct node));//开辟空间 
	newnode->da=da;    //等于 传过来的数据 
	newnode->next=NULL;
	newnode->front=NULL;
	return newnode;
}

void in(struct node*head,int i)  //添加 
{
   struct node*pnode=head;  
   struct node*a[i];//结构体数组 
   int n;
   for(n=0;n<i;n++)
   {
   	  a[n]=(struct node*)malloc(sizeof(struct node)); //每一个数组的元素都要开辟空间 
   	  printf("第%d个节点为:",n+1);
   	  scanf("%f%s",&a[n]->da.a,&a[n]->da.a1);//赋值 
	  a[n]->front=pnode;
	  pnode->next=a[n];
	  pnode=a[n];   	  
   }
   pnode->next=head;
}

void print(struct node*head)
{
	struct node*pnode=head->next;
	while(pnode!=head)
	{
        if(pnode->da.a!=0)   //float不为0 打印数字 
        {
        	float i=pnode->da.a;  //int 和 float 分类操作 
        	int t=i;
        	if(pnode->da.a/t==1)
        	printf("%d\t",t);
        	else
        	printf("%.1f\t",i);
		}
		//if(pnode->da.a!=0)
        //printf("%.1f\t",pnode->da.a);
        else
        printf("%s\t",pnode->da.a1); //float为0 打印字符串 
        pnode=pnode->next;
	}
}

void del(struct node*head) //删除  
{
	struct node*pnode=head->next;
	while(pnode!=head)
	{
		if(strcmp(pnode->da.a1,"cds")==0)//字符串的比较 
		{  
             pnode->front->next=pnode->next;
             pnode->next=pnode->front;
             return ;
		}
		pnode=pnode->next;
	}
	printf("失败"); //当循环结束 说明没有这个值 所有打印 失败 
}

void show(struct node*head,struct data x) //插入 
{
	struct node*pnode=head->next;
	struct node*newnode1=newnode(x);  
	while(pnode!=head)
	{
		if(pnode->da.a==5)  //找 (5)这个节点 
		{
			newnode1->next=pnode->next;
			newnode1->front=pnode;
			pnode->next->front=newnode1;
			pnode->next=newnode1;
		}
		pnode=pnode->next;
	}
}

int main(int argc, char *argv[])
 {
	struct node*headnode=head();
	in(headnode,7);
	print(headnode);
		
///删除///
printf("\n"); printf("\n");printf("\n");
     printf("删除\n");
     del(headnode);
     print(headnode);
  
插入//
printf("\n"); printf("\n");printf("\n");
     printf("插入\n");
     struct data x={0,"考试"};   
	 show(headnode,x);  
     print(headnode);
	return 0;
}

                  

操作演示

                 

2t

 

结果显示

  

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
Java 数组是存储相同类型数据的集合,它们具有固定大小并且在创建后大小不可更改。在Java中,数组通过声明和初始化来创建。声明数组的语法形式如下: ```java int[] arr; // 声明了一个 int 类型的数组 ``` 在声明数组之后,需要通过初始化该数组,也就是为数组分配内存和赋初值。初始化数组的方式有两种:静态初始化和动态初始化。静态初始化是在声明数组的同时给数组元素赋初值的方法,语法形式如下: ```java int[] arr = {1, 2, 3, 4, 5}; // 静态初始化数组 ``` 动态初始化是在声明数组后通过循环或用户输入等方式给数组元素赋值的方法,语法形式如下: ```java int[] arr = new int[5]; // 动态初始化数组 for (int i = 0; i < arr.length; i++) { arr[i] = i + 1; } ``` Java 数组还具有一些常用的属性和方法,如`length`属性用来获取数组的长度,`clone()`方法用来复制数组,`toString()`方法用来将数组转换为字符串等。 除了一维数组外,Java 还支持多维数组,如二维数组、三维数组等。多维数组的声明和初始化方式与一维数组类似,只是需要使用多个`[]`来表示维度。 值得注意的是,Java 中的数组是引用类型,因此在传递数组参数时,实际上传递的是数组的引用,而不是数组的副本。这意味着在方法中对数组的修改会影响到原数组。 总的来说,了解和掌握 Java 数组的声明、初始化、属性和方法,并能灵活运用,对于 Java 编程是非常重要的。希望本文能够为大家提供关于 Java 数组的全面解析和干货知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiexiexiexieqing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值