忧默的小男孩 2022-04-18 14:20 采纳率: 94.4%
浏览 60
已结题

数据结构单循环链表基本操作

这是啥错误啊,为啥我的问答里就可以运行,我的就不能运行呢,能不能帮我改改啊。

#include <stdio.h>
#include <stdlib.h>
struct node
{//链表结点类型,包含一个存放整型数据的 data 成员,和一个指向下一个结点的next成员
    int data;
    struct node * next;
};
 
//第一关代码
struct node *createRlist()
{//函数功能:创建一个有一个空循环链表,返回值为头指针
   struct node *head = (struct node *)malloc(sizeof(struct node));
   head->next= head;
   return head;
}
 
 
struct node * insertOrder(struct node* list,int insData)
{
 //在单向递增有序的循环链表(表头指针list)中插入数据元素insData,使之依然有序 。返回值是头指针
    struct node *p = (struct node *)malloc(sizeof(struct node));
    p->data=insData;
    if(list->next == list || list->next->data>insData)
    {
        p->next = list->next;
        list->next = p;
    }
    else
    {
        struct node * q = list;
        while(q->next!=list && q->next->data < insData)
            q = q->next;
        p->next = q->next;
        q->next = p;
    }
    return list;
}
 
int deleteData(struct node *list, int delData)
{
   //在单向递增有序循环链表(表头指针list)中删除所有值为delData的结点,返回值为删除结点的个数
    struct node *p = list,*q;
    while(p->next!=list && p->next->data < delData)
        p = p->next;
    if(p->next == list || p->next->data > delData)
        return 0;
    int count = 0;
    q = p->next;
    while(q!=list && q->data == delData)
    {
        q = q->next;
        count++;
    }
    p->next = q;
    return count;
}
 
void printRlist(struct node *list)
{
 //从链表第一个结点开始输出单向循环链表中各数据元素的值,每输出一个数据元素空一格
    struct node * q = list->next;
    while(q!=list)
    {
        printf("%d ",q->data);
        q = q->next;
    }
}
 
int destroyRlist(struct node *list)
{
    //从第一个结点开始释放循环链表各结点占用的空间,返回值为最后一个结点的值
    struct node *p = list->next;
    int k;
    while(list->next!=list)
    {
        p = list->next;
        list->next = p->next;
        k = p->data;
        free(p);
    }
    return k;
 
}
 
int main()
{
    struct node *list = createRlist();
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        int a;
        scanf("%d",&a);
        list = insertOrder(list,a);
    }
    printRlist(list);
    printf("\n");
    //
    int b;
    scanf("%d",&b);
    printf("%d\n",deleteData(list,b));
    printf("%d\n",destroyRlist(list));
 
    return 0;
}
 

img

img

img

img

  • 写回答

4条回答 默认 最新

  • 关注

    在 src/step1/linklist.h这个文件中的第84行,有一个main函数的定义,把这个main函数改成别的名字,比如main_2,然后重新编译就可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月18日
  • 已采纳回答 4月18日
  • 创建了问题 4月18日

悬赏问题

  • ¥15 BDSBAS-B1C和B1C信号有什么不同
  • ¥15 在半圆平面内随机生成点坐标
  • ¥15 系统容量变化的几种多址方式TDMA, CDMA,FDMA,OFDMA 对比,应该给的是一个曲线 图,随着系统容量的增加,几种多址方式性能的对比 图,MATLAB程序仿真折线图
  • ¥15 用visual Studio 写c ++只运行上一个旧代码的运行结果是怎么回事
  • ¥15 系统容量变化的几种多址方式(TDMA,FDMA,OFDMA,CDMA)对比(相关搜索:曲线图)
  • ¥15 worldclim 历史及未来气候数据矫正
  • ¥15 ajax服务器不能下载
  • ¥15 运用c++和opencv实现二维码的识别和三维坐标的建立
  • ¥100 理想汽车的ADB为什么到了国外换了SIM就可以打开?
  • ¥15 k210烧入flash报错error:2005