鱼C论坛

 找回密码
 立即注册
查看: 2058|回复: 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
不是你的代码
尝试仔细分析代码写写注释。
尝试把代码格式化好,不要给自已添堵。
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef int ElemType;

  4. typedef struct node
  5. {
  6.     ElemType data;
  7.     struct node *next;
  8. }slink;

  9. slink *cresclink(int n)
  10. {
  11.         slink *head, *p, *s;
  12.         int i;

  13.         p = head = (slink *)malloc(sizeof(slink));
  14.         for(i=1; i<=n; i++)
  15.         {
  16.            s = (slink *)malloc(sizeof(slink));
  17.            scanf("%d", &s->data);
  18.            p->next = s;
  19.            p = s;
  20.         }
  21.         p->next = head;

  22.         return head;
  23. }

  24. int insert(slink *head, int i, ElemType x)
  25. {
  26.     slink *p,*q;
  27.         int j;

  28.     if(i<1) return 0;

  29.     p=head; j=0;
  30.     while( p->next!=head && j<i-1)
  31.     {
  32.                 p = p->next;
  33.                 j++;
  34.         }

  35.     if( (p->next!=head) || (p->next==head && j==i-1) )
  36.     {
  37.         q = (slink *)malloc(sizeof(slink));
  38.         q->data = x;
  39.         q->next = p->next;
  40.         p->next = q;

  41.         return 1;
  42.     }
  43.     else return 0;
  44. }

  45. int delete(slink *head, int i, ElemType *e)
  46. {
  47.     slink *p, *q;
  48.         int j;

  49.     p=head; j=0;
  50.     while( p->next!=head && j<i-1 )
  51.     {
  52.                 p = p->next;
  53.                 j++;
  54.         }

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

  56.     q = p->next;
  57.     p->next = q->next;
  58.     *e = q->data;
  59.     free(q);

  60.     return 1;
  61. }

  62. void list(slink *head)
  63. {
  64.      slink *p = head->next;
  65.      while( p!=head )
  66.      {
  67.                 printf("%4d",p->data);
  68.                 p=p->next;
  69.          }

  70.      printf("\n");
  71. }

  72. int main()
  73. {
  74.     int n, i, e;
  75.         slink *head; // 声明头指针

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

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

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

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

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

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

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



  109.     return 0;
  110. }
复制代码


2022321_224929.png

最佳答案

查看完整内容

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

使用道具 举报

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

  3. typedef int ElemType;

  4. typedef struct node
  5. {
  6.     ElemType data;
  7.     struct node *next;
  8. }slink;

  9. slink *cresclink(int n)
  10. {
  11.         slink *head, *p, *s;
  12.         int i;

  13.         p = head = (slink *)malloc(sizeof(slink));
  14.         for(i=1; i<=n; i++)
  15.         {
  16.            s = (slink *)malloc(sizeof(slink));
  17.            scanf("%d", &s->data);
  18.            p->next = s;
  19.            p = s;
  20.         }
  21.         p->next = head;

  22.         return head;
  23. }

  24. int insert(slink *head, int i, ElemType x)
  25. {
  26.     slink *p,*q;
  27.         int j;

  28.     if(i<1) return 0;

  29.     p=head; j=0;
  30.     while( p->next!=head && j<i-1)
  31.     {
  32.                 p = p->next;
  33.                 j++;
  34.         }

  35.     if( (p->next!=head) || (p->next==head && j==i-1) )
  36.     {
  37.         q = (slink *)malloc(sizeof(slink));
  38.         q->data = x;
  39.         q->next = p->next;
  40.         p->next = q;

  41.         return 1;
  42.     }
  43.     else return 0;
  44. }

  45. int delete(slink *head, int i, ElemType *e)
  46. {
  47.     slink *p, *q;
  48.         int j;

  49.     p=head; j=0;
  50.     while( p->next!=head && j<i-1 )
  51.     {
  52.                 p = p->next;
  53.                 j++;
  54.         }

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

  56.     q = p->next;
  57.     p->next = q->next;
  58.     *e = q->data;
  59.     free(q);

  60.     return 1;
  61. }

  62. void list(slink *head)
  63. {
  64.      slink *p = head->next;
  65.      while( p!=head )
  66.      {
  67.                 printf("%4d",p->data);
  68.                 p=p->next;
  69.          }

  70.      printf("\n");
  71. }

  72. int main()
  73. {
  74.     int n, i, e;
  75.         slink *head; // 声明头指针

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

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

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

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

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

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

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



  109.     return 0;
  110. }
复制代码


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, 2024-4-29 02:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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