鱼C论坛

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

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

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

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

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

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

#define MAX 100
typedef int Element;


struct staticLinkList{
        int data;
        int cur;
}SLL[MAX];

int init(struct staticLinkList SLL[]);
int Malloc_SLL(struct staticLinkList SLL[]);
int insert(struct staticLinkList SLL[],int n,int m);
int del(struct staticLinkList SLL[],int n);
int SLL_Free(struct staticLinkList SLL[],int k);

int main(void){
        int op,i,j;
        printf("请选择需要的操作:\n");
        printf("1 插入元素\n2 删除元素\n3 退出\n");
        scanf("%d,&op");
        while(op != 3){
                switch(op){
                        case 1: printf("请输入要插入的位置与数字:");scanf("%d%d",&i,&i);insert(SLL,i,j);break;
                        case 2: printf("请输入要删除的元素的位置:");scanf("%d",&i);del(SLL,i);break;
                        case 3: exit(1);
                }
                
        }
        
        return 0;                
}

int init(struct staticLinkList SLL[]){
        int i;
        for(i = 0;i < MAX - 1;i++){
                SLL[i].data = 0;
                SLL[i].cur = i + 1;
        }
        SLL[MAX - 1].cur = 0;
        return 1;
}
int Malloc_SLL(struct staticLinkList SLL[]){
        int f; // 接收备用链表的起始位置
        f = SLL[0].cur;
        if(SLL[0].cur ){
                SLL[0].cur = SLL[f].cur;        
        }
        return f;
}
int insert(struct staticLinkList SLL[],int n,int m){ //n 为插入的数据,m为插入的位置; 
        int f = Malloc_SLL(SLL);
        int s = MAX - 1,i;
        SLL[f].data = n;

        for(i = 0;i < m - 1;i++){
                s = SLL[s].cur;
        }
        SLL[f].cur = SLL[s].cur;
        SLL[s].cur = f;
        return 1;
}
int del(struct staticLinkList SLL[],int n){
        int s = MAX - 1,i,k;
        for(i = 0;i < n - 1;i++){
                s = SLL[s].cur;
        }
        k = SLL[s].cur;
        SLL[s].cur = SLL[k].cur;
        SLL_Free(SLL,k);
        return 1;
}
int SLL_Free(struct staticLinkList SLL[],int k){
        SLL[k].cur = SLL[0].cur;
        SLL[0].cur = k;
        return 1;
}
请问,如果是刚初始化的静态链表,怎么添加第一的元素呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-28 21:44:18 | 显示全部楼层
如果是初始链表,那么不就都是备用链了吗,第一个元素直接插入不就行了吗,下标都不用改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

emm不只是这样,还要将最后一个元素的游标改成零
而且在插入第一个数据的时候,游标会变成一,变成死循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我就直接通过分类解决了,但是要怎样才知道链表的最后一个数呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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