IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构——商品链表更新 -> 正文阅读

[数据结构与算法]数据结构——商品链表更新

先写感悟,使用strcmp函数时,传入的时指针,或者字符串。对应的需要给变量添加&,而单个字符的比较不需要这么复杂。

再者,指针插入操作的时候,如果是原有链表的指针,直接使用赋值就好,不要用指向下一个的操作,否则程序会变得很奇怪。

最烦的是devc++的调试链表的时候不能看到具体的内容,只能凭自己去猜bug。

吐槽Moodle网站,什么**,怎么不去死。教学需要和实际完全脱离。趁早run吧。

代码如下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//旧三新五?
typedef struct Node{
?? ?int data;//数量?
?? ?char no;//编号?
?? ?struct Node*next;
}Node;

Node *start(Node*head){
?? ?head=(Node*)malloc(sizeof(Node));
?? ?head->next=NULL;
?? ?return head;
}

Node *create(Node*head,int n){
?? ?Node*tail,*p;//tail是尾节点,p是中间节点
?? ?tail=head;
?? ?int i=0;
?? ?for(i=0;i<n;i++){
?? ??? ?p=(Node*)malloc(sizeof(Node));
?? ??? ?scanf("%c",&p->no);
?? ??? ?if(p->no==',')scanf("%c",&p->no);
?? ??? ?scanf("%d",&p->data);
?? ??? ?getchar();
?? ??? ?tail->next=p;
?? ??? ?tail=p;
?? ?}
?? ?tail->next=NULL;
}

void join(Node*old,Node*ne){
?? ?Node*pre1,*pre2;//p1,pre1指old,p2,pre2指ne
?? ?pre1=old;
?? ?pre2=ne;
?? ?int i=0;
?? ?if(pre1==old)pre1=pre1->next;
?? ?if(pre2==ne)pre2=pre2->next;
?? ?while(pre2->next!=NULL){
?? ??? ?//pre1和pre2相等
?? ??? ?if(pre1->no==pre2->no){
?? ??? ??? ?//pre1,p1指针不动?
?? ??? ??? ?pre1->data=pre1->data+pre2->data;
?? ??? ??? ?pre2=pre2->next;
?? ??? ??? ?continue;
?? ??? ?}
?? ??? ?//pre1比较小
?? ??? ?else if(pre1->no<pre2->no&&pre1->next!=NULL){
?? ??? ??? ?//且p1的no比pre2大?
?? ??? ??? ?//插入操作 ?
?? ??? ??? ?if(pre1->next->no>pre2->no){
?? ??? ??? ??? ?Node*p;
?? ??? ??? ??? ?p=pre2->next;
?? ??? ??? ??? ?pre2->next=pre1->next;;
?? ??? ??? ??? ?pre1->next=pre2;
?? ??? ??? ??? ?pre1=pre2;
?? ??? ??? ??? ?pre2=p;
?? ??? ??? ??? ?continue;
?? ??? ??? ?}
?? ??? ??? ?//p1和pre2一样大?
?? ??? ??? ?else if(pre1->next->no==pre2->no){
?? ??? ??? ??? ?pre1=pre1->next;
?? ??? ??? ??? ?pre1->data+=pre2->data;
?? ??? ??? ??? ?pre2=pre2->next;
?? ??? ??? ??? ?continue;
?? ??? ??? ?}
?? ??? ??? ?else{
?? ??? ??? ??? ?pre1=pre1->next;
?? ??? ??? ?}?? ??? ??? ?
?? ??? ?}
?? ??? ?//pre1无后续节点?
?? ??? ?else{
?? ??? ??? ?pre1->next=pre2;
?? ??? ??? ?pre2=pre2->next;
?? ??? ?}
?? ?}
?? ?//pre2的最后一个元素
?? ?//相等情况?
?? ?if(pre1->no==pre2->no){
?? ??? ?pre1->data+=pre2->data;
?? ?}
?? ?//pre1更大?
?? ?else{
?? ??? ?if(pre1->next==NULL){
?? ??? ??? ?pre1->next=pre2;
?? ??? ??? ?pre1=pre1->next;
?? ??? ??? ?pre1->next=NULL;
?? ??? ?}
?? ?}
?? ?return;
}

void printo(Node*old){
?? ?Node*p;
?? ?p=old;
?? ?p=p->next;
?? ?while(p->next!=NULL){
?? ??? ?printf("%c%d,",p->no,p->data);
?? ??? ?p=p->next;
?? ?}
?? ?printf("%c%d",p->no,p->data);
?? ?printf("\n");
}

int main(){
?? ?Node*old,*ne;
?? ?old=start(old);
?? ?ne=start(ne);
?? ?create(old,3);
?? ?//printo(old);
?? ?create(ne,5);
?? ?//printo(ne);
?? ?join(old,ne);
?? ?printo(old);
?? ?return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 21:07:03  更:2022-10-08 21:10:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:04:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计