问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言程序链表问题

发布网友 发布时间:2022-05-27 13:34

我来回答

3个回答

热心网友 时间:2023-10-25 17:57

虽然题目一个链表只要3元素,但我不想把代码写死,修改常量可实现任意长度链表。

另外你强调不能用头结点,所以我用指向首节点的指针。(头结点只是方便定位链表,和首节点指针其实意义相同,否则你去哪找之前创建好的链表)

#include <stdio.h>
#include <malloc.h>
#define LN 3//最大链表元素数量,这里题目只要3个
typedef struct list
{
    int num;
    struct list *next;
}LIST;
LIST * creatList();
LIST *px(LIST *listP);
void printfLIST(LIST *listP);
LIST *cLists(LIST *listP1,LIST *listP2);
int main()
{
    LIST *listP1=NULL,*listP2=NULL;
    printf("输入:\n");
    listP1=creatList();
    px(listP1);
    listP2=creatList();
    px(listP2);
    printf("输出:\n");
    printfLIST(listP1);
    printfLIST(listP2);
    printfLIST(cLists(listP1,listP2));
    return 0;
}
void printfLIST(LIST *listP)//打印链表
{
    while(listP)
    {
        printf("%d ",listP->num);
        if(listP->next==NULL)
            break;
        listP=listP->next;
    }
    printf("\n");
}
LIST * creatList()//输入创建单链表,返回首节点指针
{
    int i=LN;
    LIST *listP=NULL,*listTail=NULL;
    while(i-->0)
    {
        LIST *listNew=(LIST *)malloc(sizeof(LIST));
        listNew->next=NULL;
        scanf("%d",&listNew->num);
        if(listP==NULL)
            listP=listNew;
        else
            listTail->next=listNew;
        listTail=listNew;
    }
    return listP;
}
LIST *px(LIST *listP)//排序,返回首节点指针
{
    LIST * listf=listP,*listn=NULL;
    while(listf)
    {
        listn=listf->next;
        while(listn)
        {
            if(listf->num>listn->num)
                listf->num^=listn->num,listn->num^=listf->num,listf->num^=listn->num;
            if(listn->next==NULL)
                break;
            listn=listn->next;
        }
        if(listf->next==NULL)
            break;
        listf=listf->next;
    }
    return listP;
}
LIST *cLists(LIST *listP1,LIST *listP2)//连接两个链表,返回首节点指针
{
    LIST *listP3=listP1;
    while(listP1)
    {
        if(listP1->next==NULL)
            break;
        listP1=listP1->next;
    }
    listP1->next=listP2;
    return listP3;
}

热心网友 时间:2023-10-25 17:58

操作系统 win 8.1// 编译环境 Visual Stuido 2017#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef int ElementType; // 定义数据类型,可根据需要进行其他类型定义 // 链表节点的定义typedef struct ListNode {
ElementType Element; // 数据域,存放数据
ListNode* Next; // 指向下一个链表节点}Node, *PNode;// 链表创建函数定义PNode CreateList(void) { int len ; // 用于定义链表长度
int val ; // 用于存放节点数值
PNode PHead = (PNode)malloc(sizeof(Node)); // 创建分配一个头节点内存空间
//头节点相当于链表的哨兵,不存放数据,指向首节点(第一个节点)
if (PHead == NULL) // 判断是否分配成功 {
printf("空间分配失败 \n");
exit(-1);
}

PNode PTail = PHead; // 链表的末尾节点,初始指向头节点
PTail->Next = NULL; // 最后一个节点指针置为空
printf("请输入节点个数:");
scanf_s("%d", &len); // 输入节点个数
for (int i = 0; i < len; i++) {

PNode pNew = (PNode)malloc(sizeof(Node)); // 分配一个新节点
if (pNew == NULL) {
printf("分配新节点失败\n");
exit(-1);
}
printf("请输入第 %d 个节点的数据:", i + 1);
scanf_s("%d", &val); // 输入链表节点的数据
pNew->Element = val; // 把数据赋值给节点数据域
PTail->Next = pNew; // 末尾节点指针指向下一个新节点
pNew->Next = NULL; // 新节点指针指向为空
PTail = pNew; // 将新节点复制给末尾节点 }
printf("创建链表成功\n"); return PHead; // 返回头节点}// 主函数 int main() {
PNode List = CreateList(); //创建一个指针,使其指向新创建的链表的头指针
return 0;
}

热心网友 时间:2023-10-25 17:58

你的这个要求不会有人答应的。因为:(1)、你的这个题目难度很大,首先从程序的编程难度和规模上讲,比老师留的一个 C 语言大作业还大,更何况在你的要求中还涉及到了 C 语言的最精华、同时也是最、最难于调试的程序代码:指针!!因为指针在 C 语言中是一个极其重要、且非常抽象的概念,况且如果再将涉及到的指针的相关知识,应用于建立、删除、排序各种链表(即:单链表一个指针变量、或者是:双链表两个指针变量)、并且调试通过这类的源代码,那就更是难上加难的事情!
(2)、此外必须要知道:编写任何一个高级语言源程序,要想从编程、编译、调试、直到最后运行出正确的结果,那是必须要有一个上机编程环境,且经过亲自上机调试,而不是靠在纸上写完程序,就一定能够保证程序运行出正确结果的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么对gRPC做负载均衡会很棘手? 要得到函数y=cos2x的图像,只需把函数y=sin2x的图像 xcosa-ysina=1 的图像是什么 要得到函数y=-2sinx的图像,只需将函数y=2cosx的图像 要得到y=2^(-x+3)的图像,只需把y=-2^x的图像向左平移3个单位即可 急求sina cosa tana 图像 医院一般做个 全身检查多少钱?北京地区! 天下粮人鲜米机 喷风式米机油糠易粘筛网怎么办 米机打米为什排不干净油糠容易堵 C++中怎么把 unint8 [] 转成 java 的 byte []? c语言编程,简单点。建立一个单向链表,完成插入和删除,输出相操作后结果。 c语言链表编程题 Setting_T结构体字节为什么是28呢? 用C语言的链表编程 RR = uint8(zeros(height,width)); 什么意思? M = fread(fid,inf,&#39;uint8=&gt;uint8&#39;);这句话如何理解呢 c语言编程问题 链表 请问C语言中的uint8_t关键字是什么意思?为什么在普通的C语言书本中并未见过它? typedef unsigned char uint8_t关于占几个字节 c语言(uint8 *)t表示什么? uint8 和 uint16差8个字节,为什么FLASH写入uint16类型只要偏移4个字节 油漆该怎么选择抗紫外线吸收剂? 哪种油漆在户外使用,太阳照射可常年不褪色或褪色很少,具体有什么油漆做法吗?用在造型雕塑上的,鲜红色 什么油漆适合室外防水防 防暴晒 防紫外线 不会开裂 那些防紫外线的油漆,是什么成份在起作用?一般能维持多久不变色? 防紫外线油漆 可以防紫外线的涂料有哪些? 视贝A799K万能遥控器的代码是多少 奥克斯空调遥控代码 视贝A799K 这个int8_t范围到底是什么? 为什么图片电脑上显示的16K大小的文件其实际大小为65536字节,matlab里面看的65536 uint8 关于链表,函数的C语言编程 C语言编程 链表问题 衡阳市珠晖区幼儿园最好的是哪个? 国瑞·山湖海庄园怎么样?好不好?值不值得买? 鸿星帝景湾怎么样?好不好?值不值得买? C语言程序设计,编程,见图 河南省2017年电气工程师发输变电工程师最新招聘信息? 怎么申请呢? 现在用什么软件可以注册 怎么注册 如何申请注册 什么软件可以申请 怎么申请 有没有那种软件一直可以申请的那种 微信8.0怎么注册 怎么申请 注册 手提式化学泡沫灭火器每次使用后应采取的做法不正确的 有注册的软件吗