鱼C论坛

 找回密码
 立即注册
查看: 2737|回复: 3

向各位大佬请教有关静态链表的插入问题

[复制链接]
发表于 2019-2-28 20:52:05 | 显示全部楼层 |阅读模式

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

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

x
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define MAX 100
  4. typedef int Element;


  5. struct staticLinkList{
  6.         int data;
  7.         int cur;
  8. }SLL[MAX];

  9. int init(struct staticLinkList SLL[]);
  10. int Malloc_SLL(struct staticLinkList SLL[]);
  11. int insert(struct staticLinkList SLL[],int n,int m);
  12. int del(struct staticLinkList SLL[],int n);
  13. int SLL_Free(struct staticLinkList SLL[],int k);

  14. int main(void){
  15.         int op,i,j;
  16.         printf("请选择需要的操作:\n");
  17.         printf("1 插入元素\n2 删除元素\n3 退出\n");
  18.         scanf("%d,&op");
  19.         while(op != 3){
  20.                 switch(op){
  21.                         case 1: printf("请输入要插入的位置与数字:");scanf("%d%d",&i,&i);insert(SLL,i,j);break;
  22.                         case 2: printf("请输入要删除的元素的位置:");scanf("%d",&i);del(SLL,i);break;
  23.                         case 3: exit(1);
  24.                 }
  25.                
  26.         }
  27.        
  28.         return 0;               
  29. }

  30. int init(struct staticLinkList SLL[]){
  31.         int i;
  32.         for(i = 0;i < MAX - 1;i++){
  33.                 SLL[i].data = 0;
  34.                 SLL[i].cur = i + 1;
  35.         }
  36.         SLL[MAX - 1].cur = 0;
  37.         return 1;
  38. }
  39. int Malloc_SLL(struct staticLinkList SLL[]){
  40.         int f; // 接收备用链表的起始位置
  41.         f = SLL[0].cur;
  42.         if(SLL[0].cur ){
  43.                 SLL[0].cur = SLL[f].cur;       
  44.         }
  45.         return f;
  46. }
  47. int insert(struct staticLinkList SLL[],int n,int m){ //n 为插入的数据,m为插入的位置;
  48.         int f = Malloc_SLL(SLL);
  49.         int s = MAX - 1,i;
  50.         SLL[f].data = n;

  51.         for(i = 0;i < m - 1;i++){
  52.                 s = SLL[s].cur;
  53.         }
  54.         SLL[f].cur = SLL[s].cur;
  55.         SLL[s].cur = f;
  56.         return 1;
  57. }
  58. int del(struct staticLinkList SLL[],int n){
  59.         int s = MAX - 1,i,k;
  60.         for(i = 0;i < n - 1;i++){
  61.                 s = SLL[s].cur;
  62.         }
  63.         k = SLL[s].cur;
  64.         SLL[s].cur = SLL[k].cur;
  65.         SLL_Free(SLL,k);
  66.         return 1;
  67. }
  68. int SLL_Free(struct staticLinkList SLL[],int k){
  69.         SLL[k].cur = SLL[0].cur;
  70.         SLL[0].cur = k;
  71.         return 1;
  72. }
复制代码

请问,如果是刚初始化的静态链表,怎么添加第一的元素呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-28 21:44:18 | 显示全部楼层
如果是初始链表,那么不就都是备用链了吗,第一个元素直接插入不就行了吗,下标都不用改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-28 22:52:02 | 显示全部楼层
暗pluto 发表于 2019-2-28 21:44
如果是初始链表,那么不就都是备用链了吗,第一个元素直接插入不就行了吗,下标都不用改

emm不只是这样,还要将最后一个元素的游标改成零
而且在插入第一个数据的时候,游标会变成一,变成死循环了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-28 22:52:59 | 显示全部楼层
cookies945 发表于 2019-2-28 22:52
emm不只是这样,还要将最后一个元素的游标改成零
而且在插入第一个数据的时候,游标会变成一,变成死循 ...

我就直接通过分类解决了,但是要怎样才知道链表的最后一个数呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 23:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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