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

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

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

#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 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波