鱼C论坛

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

数据结构 建表

[复制链接]
发表于 2020-3-8 21:57:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
建表(初始化表)函数: ListInit()
typedef int Listltem;
构建一 张元素顺序存储表,完成一 下操作:|
插入:1 2 3 4 5-->1 2 6 3 4 5
删除:1 2 3 4 5-->1 2 3 5
求大佬救救孩子吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-8 22:07:10 | 显示全部楼层
问题都没看懂。表示没法帮!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 22:57:29 | 显示全部楼层
本帖最后由 major_lyu 于 2020-3-8 23:01 编辑


给你写了建表和删除的
  1. #include <stdio.h>
  2. #include <malloc.h>

  3. typedef struct node
  4. {
  5.     int val;
  6.     struct node *next;
  7. } ListItem;

  8. ListItem *ListInit();
  9. void printList(ListItem *head);
  10. void deleteItem(ListItem *head, int key);

  11. int main()
  12. {
  13.     ListItem *list = NULL;
  14.     list = ListInit();
  15.     printList(list);
  16.     int n;
  17.     printf("input the key to be deleted\n");
  18.     scanf("%d", &n);
  19.     deleteItem(list, n);
  20.     printList(list);

  21.     return 0;
  22. }

  23. ListItem *ListInit()
  24. {
  25.     int num;
  26.     printf("please input the numbers of iterms\n");
  27.     scanf("%d", &num);
  28.     if (num <= 0)
  29.         return NULL;
  30.     printf("input items to be added:\n");
  31.     ListItem *head = malloc(sizeof(ListItem));
  32.     ListItem *ptr = head;
  33.     for (int i = 0; i < num - 1; i++)
  34.     {
  35.         scanf("%d", &(ptr->val));
  36.         ptr->next = malloc(sizeof(ListItem));
  37.         ptr = ptr->next;
  38.     }

  39.     scanf("%d", &(ptr->val));
  40.     ptr->next = NULL;
  41.     return head;
  42. }

  43. void printList(ListItem *head)
  44. {
  45.     ListItem *ptr = head;
  46.     while (ptr != NULL)
  47.     {
  48.         printf("%d->", ptr->val);
  49.         ptr = ptr->next;
  50.     }
  51.     printf("NULL\n");
  52. }

  53. void deleteItem(ListItem *head, int key)
  54. {
  55.     ListItem *ptr = head;
  56.     while (ptr->next != NULL)
  57.     {
  58.         if (ptr->next->val == key)
  59.         {
  60.             ListItem *temp = ptr->next;
  61.             ptr->next = ptr->next->next;
  62.             free(temp);
  63.         }
  64.         else
  65.         {
  66.             ptr = ptr->next;
  67.         }
  68.     }
  69. }
复制代码

微信截图_20200308213337.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 20:41:37 | 显示全部楼层
major_lyu 发表于 2020-3-8 22:57
给你写了建表和删除的

太感谢了,我去研究研究
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 20:47:19 | 显示全部楼层
major_lyu 发表于 2020-3-8 22:07
问题都没看懂。表示没法帮!!!

害,我也不懂这种东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 20:22:10 | 显示全部楼层
我也是初学者,写的可能好理解一点,学过去一段时间了,感觉生疏了,正好复习一下嘿嘿,就是创建,插入,测量,删除的几个操作。
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. #define LEN sizeof(LinkList)

  4. typedef struct        Node
  5. {
  6.         int data;
  7.         struct Node* next;
  8. }LinkList;

  9. LinkList *InitList()
  10. {
  11.         LinkList* L;
  12.         L = (LinkList *)malloc(LEN);
  13.         if (L == NULL)
  14.         {
  15.                 exit(0);
  16.         }
  17.         L->next == NULL;
  18.         return L;
  19. }

  20. LinkList *CreatList()  //尾插法创建单链表
  21. {
  22.         LinkList* L;
  23.         LinkList* p;
  24.         LinkList* tail; //定义一个尾指针
  25.         int num;
  26.        
  27.         L = InitList();  //头结点
  28.         tail = L;
  29.         printf("创建一个单链表,请输入数据以0结束: ");
  30.         scanf("%d", &num);
  31.         while (num != 0)
  32.         {
  33.                 p = (LinkList*)malloc(LEN);
  34.                 p->data = num;
  35.                 tail->next = p;
  36.                 tail = p;
  37.                 scanf("%d",&num);
  38.         }
  39.         tail->next = NULL;

  40.         return L;
  41. }

  42. void PrintList(LinkList* L)
  43. {
  44.         LinkList* p;
  45.         p = L->next;
  46.         while (p != NULL)
  47.         {
  48.                 printf("%d ", p->data);
  49.                 p = p->next;
  50.         }
  51. }

  52. LinkList* DeleteList(LinkList* L, int N)
  53. {
  54.         LinkList* p;
  55.         LinkList* q;
  56.         p = L->next;
  57.         while (p != NULL)
  58.         {
  59.                 if (L->next->data == N)  //如果第一个结点就是要删除的元素
  60.                 {
  61.                         L->next = L->next->next;
  62.                         break;
  63.                 }
  64.                 else if(p->next->data == N)
  65.                 {
  66.                         p->next = p->next->next;
  67.                         break;
  68.                 }
  69.                 p = p->next;
  70.         }

  71.         return L;
  72. }

  73. int        ListLength(LinkList* L)
  74. {
  75.         int count = 0;
  76.         LinkList* p;
  77.        
  78.         p = L->next;
  79.        
  80.         while (p != NULL)
  81.         {
  82.                 count++;
  83.                 p = p->next;
  84.         }
  85.        
  86.         return count;
  87. }

  88. LinkList* InsertList(LinkList* L, int M, int local)
  89. {
  90.         int i=0;
  91.         LinkList *p;
  92.         LinkList* q;  //用来接收要插入的数据

  93.         q = (LinkList *)malloc(LEN);
  94.         p = L->next;
  95.         q->data = M;
  96.         while (p != NULL)
  97.         {
  98.                 if (local == 1)  //如果插在第一个结点
  99.                 {
  100.                         q->next = L->next;
  101.                         L->next = q;
  102.                         break;
  103.                 }
  104.                 else if((i+2) == local)
  105.                 {
  106.                         q->next = p->next;
  107.                         p->next = q;
  108.                         break;
  109.                 }
  110.                 i++;
  111.                 p = p->next;
  112.         }

  113.         return L;
  114. }

  115. int main(void)
  116. {
  117.         LinkList* L;
  118.         int N;
  119.         int local, M;
  120.         int len;

  121.         L = CreatList();

  122.         printf("当前链表中的元素是:\n");
  123.         PrintList(L);

  124.         printf("\n当前链表的长度是:");
  125.         len = ListLength(L);
  126.         printf("%d", len);

  127.         printf("\n请输入你想插入的元素是及它的位置: ");
  128.         scanf("%d %d", &M, &local);
  129.         InsertList(L, M, local);

  130.         printf("插入后链表中的元素是:\n");
  131.         PrintList(L);

  132.         printf("\n请输入你想要删除的元素:");
  133.         scanf("%d", &N);
  134.         DeleteList(L,N);

  135.         printf("删除后链表中的元素是:\n");
  136.         PrintList(L);

  137.         return 0;
  138. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 21:07:57 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-3-10 21:12 编辑

你看看!
首先要确定你要操作的节点位置,然后找到你要操作位置的上一个节点!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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