哈咯~ 今天的最后一题
还是 大家先做一做 看看和我一不一样
1.添加数据 (345)(cds)(5)(9.1)(0.4)(age)(name)
2.删除第二个数据
3.将 (考试)插入在(5)后面
目录
粗略分析
1.添加数据
2.删除 第二个数据
3.插入(考试)
细节分析
1.遍历数据的类型
2.数字类型的打印
3.字符串的比较
代码实现
操作演示
结果显示
这道题的数据有两类 数字 和 字符串
所有要定义一个结构体数组 题里的数据有 整型 和浮点型 为了兼容
结构体就定义 flaot型 和 char型
在进行双链表的操作
这个题比较人性化 数据很少 第二个 一眼看过去就找到是(cds)
所有在删除前 先找 在 删除
(考试)插入在(5)后面还是
先遍历再到(5)在插入
这个数据有两个 一种是 数字 一种是 字符串
它是什么类型打印什么类型 所有
第一个(345)让 float=345 char=NULL
第二个 (cds)让 float=0 char=cds
...............
遍历的时候只要 float=0 就是字符串 打印char float!=0 就是数字 打印float
这样就可以把 数字 和字符串分开打印
数字有(345)int型 和(9.1)flaot型
打印的时候还是要把他们分开
这里给大家分析一个小技巧
定义一个和结构体数据里面一样的 float型的 让T等于结构体里的数
在定义一个 int 型的 L 让L=T 就把数据强制转化为int型
然后 L/T 如果他们=1 就是int型 打印%d
如果不等于1 就是float型 打印%f
字符串的比较和数字的比较不同 是用函数比较的 比如
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