鱼C论坛

 找回密码
 立即注册
查看: 2472|回复: 6

[已解决]数据结构问题

[复制链接]
发表于 2022-3-21 21:48:10 | 显示全部楼层 |阅读模式
5鱼币
#include "stdio.h"
#include <stdio.h>
#include <malloc.h>

typedef int ElemType;
typedef struct node
{
    ElemType data;
    struct node *next;
}slink;
slink *cresclink(int n)
{
    slink *head,*p,*s;
    int i;
    p=head=(slink *)malloc(sizeof(slink));
   for(i=1;i<=n;i++)
   {
       s=(slink *)malloc(sizeof(slink));
       scanf("%d",&s->data);
       p->next=s;
       p=s;
   }
   p->next=head;
    return head;
}
int insert(slink *head,int i,ElemType x)
{
    slink *p,*q;int j;
    if(i<1)return 0;
    p=head;j=0;
    while(p->next!=head&&j<i-1)
    {p=p->next;j++;}
    if((p->next!=head)||(p->next==head&&j==i-1))
    {
        q=(slink *)malloc(sizeof(slink));
        q->data=x;
        q->next=p->next;
        p->next=q;
        return 1;
    }
    else return 0;
}
int delete(slink *head,int i,ElemType *e)
{
    slink *p,*q;int j;
    p=head;j=0;
    while(p->next!=head&&j<i-1)
    {p=p->next;j++;}
    if(p->next==head)return 0;
    q=p->next;
    p->next=q->next;
    *e=q->data;
    free(q);
    return 1;
}
void list(slink *head)
{
     slink *p=head->next;
     while(p!=head)
     {printf("%4d",p->data);
      p=p->next;}
      printf("\n");
}
int main()
{
    int n;
    printf("please input n:");
    scanf("%d",&n);
    return 0;
}


问一下这个int main()里要填入些什么东西,基本不懂代码完全按照课本上面打的 建立的是一个带头结点单向循环链表 插入元素 删除元素 输出带头结点的单链表
最佳答案
2022-3-21 21:48:11
不是你的代码
尝试仔细分析代码写写注释。
尝试把代码格式化好,不要给自已添堵。
#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct node
{
    ElemType data;
    struct node *next;
}slink;

slink *cresclink(int n)
{
        slink *head, *p, *s;
        int i;

        p = head = (slink *)malloc(sizeof(slink));
        for(i=1; i<=n; i++)
        {
           s = (slink *)malloc(sizeof(slink));
           scanf("%d", &s->data);
           p->next = s;
           p = s;
        }
        p->next = head;

        return head;
}

int insert(slink *head, int i, ElemType x)
{
    slink *p,*q;
        int j;

    if(i<1) return 0;

    p=head; j=0;
    while( p->next!=head && j<i-1)
    {
                p = p->next;
                j++;
        }

    if( (p->next!=head) || (p->next==head && j==i-1) )
    {
        q = (slink *)malloc(sizeof(slink));
        q->data = x;
        q->next = p->next;
        p->next = q;

        return 1;
    }
    else return 0;
}

int delete(slink *head, int i, ElemType *e)
{
    slink *p, *q;
        int j;

    p=head; j=0;
    while( p->next!=head && j<i-1 )
    {
                p = p->next;
                j++;
        }

    if(p->next==head) return 0;

    q = p->next;
    p->next = q->next;
    *e = q->data;
    free(q);

    return 1;
}

void list(slink *head)
{
     slink *p = head->next;
     while( p!=head )
     {
                printf("%4d",p->data);
                p=p->next;
         }

     printf("\n");
}

int main()
{
    int n, i, e;
        slink *head; // 声明头指针

    printf("please input n:");
    scanf("%d",&n);

        // 1.创建链表
        head = cresclink(n); // 该函数返回的是 头指针

        // 2.通常创建好后就把数据显示一遍
        list(head); // 把头指针传进入

        // 3. 测试 插入 功能
        printf("请输入要插入元素(位置 元素):");
        scanf("%d", &i);
        scanf("%d", &e);
        if(insert(head, i, e)) // 参数(头指针,插入位置, 要插入的元素),返回值1成功,0失败
        {
                printf("在位置%d插入%d成功。\n", i, e);
        }
        else
        {
                printf("%d插入失败!\n");
        }

        // 4. 数据显示一遍
        list(head);

        // 5. 测试 删除 功能
        printf("请输入要删除元素的位置:");
        scanf("%d", &i);
        if(delete(head, i, &e)) // 参数(头指针,要删除的位置, 返回删除的元素),返回值1成功,0失败
        {
                printf("删除位置%d的元素%d成功。\n", i, e);
        }
        else
        {
                printf("位置%d的元素失败!\n", i);
        }

        // 6. 数据显示一遍
        list(head);



    return 0;
}

2022321_224929.png

最佳答案

查看完整内容

不是你的代码 尝试仔细分析代码写写注释。 尝试把代码格式化好,不要给自已添堵。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 21:48:11 | 显示全部楼层    本楼为最佳答案   
不是你的代码
尝试仔细分析代码写写注释。
尝试把代码格式化好,不要给自已添堵。
#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct node
{
    ElemType data;
    struct node *next;
}slink;

slink *cresclink(int n)
{
        slink *head, *p, *s;
        int i;

        p = head = (slink *)malloc(sizeof(slink));
        for(i=1; i<=n; i++)
        {
           s = (slink *)malloc(sizeof(slink));
           scanf("%d", &s->data);
           p->next = s;
           p = s;
        }
        p->next = head;

        return head;
}

int insert(slink *head, int i, ElemType x)
{
    slink *p,*q;
        int j;

    if(i<1) return 0;

    p=head; j=0;
    while( p->next!=head && j<i-1)
    {
                p = p->next;
                j++;
        }

    if( (p->next!=head) || (p->next==head && j==i-1) )
    {
        q = (slink *)malloc(sizeof(slink));
        q->data = x;
        q->next = p->next;
        p->next = q;

        return 1;
    }
    else return 0;
}

int delete(slink *head, int i, ElemType *e)
{
    slink *p, *q;
        int j;

    p=head; j=0;
    while( p->next!=head && j<i-1 )
    {
                p = p->next;
                j++;
        }

    if(p->next==head) return 0;

    q = p->next;
    p->next = q->next;
    *e = q->data;
    free(q);

    return 1;
}

void list(slink *head)
{
     slink *p = head->next;
     while( p!=head )
     {
                printf("%4d",p->data);
                p=p->next;
         }

     printf("\n");
}

int main()
{
    int n, i, e;
        slink *head; // 声明头指针

    printf("please input n:");
    scanf("%d",&n);

        // 1.创建链表
        head = cresclink(n); // 该函数返回的是 头指针

        // 2.通常创建好后就把数据显示一遍
        list(head); // 把头指针传进入

        // 3. 测试 插入 功能
        printf("请输入要插入元素(位置 元素):");
        scanf("%d", &i);
        scanf("%d", &e);
        if(insert(head, i, e)) // 参数(头指针,插入位置, 要插入的元素),返回值1成功,0失败
        {
                printf("在位置%d插入%d成功。\n", i, e);
        }
        else
        {
                printf("%d插入失败!\n");
        }

        // 4. 数据显示一遍
        list(head);

        // 5. 测试 删除 功能
        printf("请输入要删除元素的位置:");
        scanf("%d", &i);
        if(delete(head, i, &e)) // 参数(头指针,要删除的位置, 返回删除的元素),返回值1成功,0失败
        {
                printf("删除位置%d的元素%d成功。\n", i, e);
        }
        else
        {
                printf("位置%d的元素失败!\n", i);
        }

        // 6. 数据显示一遍
        list(head);



    return 0;
}

2022321_224929.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 22:13:36 | 显示全部楼层
建议你还是耐心多学几遍,多照着敲代码也可以。基础不打好,后面就不用学了。
#include "stdio.h"
#include <stdio.h>
#include <malloc.h>
这三条我看了就很纳闷了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-21 22:15:35 | 显示全部楼层
ba21 发表于 2022-3-21 22:13
建议你还是耐心多学几遍,多照着敲代码也可以。基础不打好,后面就不用学了。
#include "stdio.h"
#inclu ...

好的老哥,但是我这个也是按照课本打得(指的是链表的那几个功能)不知道还要补充什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-21 22:16:20 | 显示全部楼层
zhangyit1 发表于 2022-3-21 22:15
好的老哥,但是我这个也是按照课本打得(指的是链表的那几个功能)不知道还要补充什么

那三个include 我是乱打的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-22 00:37:39 | 显示全部楼层
ba21 发表于 2022-3-21 22:51
不是你的代码
尝试仔细分析代码写写注释。
尝试把代码格式化好,不要给自已添堵。

谢谢老哥,我会总结经验的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-22 16:58:31 | 显示全部楼层
zhangyit1 发表于 2022-3-22 00:37
谢谢老哥,我会总结经验的

请把贴结了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-23 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表