向各位大佬请教有关静态链表的插入问题
#include <stdio.h>#include <stdlib.h>
#define MAX 100
typedef int Element;
struct staticLinkList{
int data;
int cur;
}SLL;
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.data = 0;
SLL.cur = i + 1;
}
SLL.cur = 0;
return 1;
}
int Malloc_SLL(struct staticLinkList SLL[]){
int f; // 接收备用链表的起始位置
f = SLL.cur;
if(SLL.cur ){
SLL.cur = SLL.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.data = n;
for(i = 0;i < m - 1;i++){
s = SLL.cur;
}
SLL.cur = SLL.cur;
SLL.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.cur;
}
k = SLL.cur;
SLL.cur = SLL.cur;
SLL_Free(SLL,k);
return 1;
}
int SLL_Free(struct staticLinkList SLL[],int k){
SLL.cur = SLL.cur;
SLL.cur = k;
return 1;
}
请问,如果是刚初始化的静态链表,怎么添加第一的元素呢? 如果是初始链表,那么不就都是备用链了吗,第一个元素直接插入不就行了吗,下标都不用改 暗pluto 发表于 2019-2-28 21:44
如果是初始链表,那么不就都是备用链了吗,第一个元素直接插入不就行了吗,下标都不用改
emm不只是这样,还要将最后一个元素的游标改成零
而且在插入第一个数据的时候,游标会变成一,变成死循环了
cookies945 发表于 2019-2-28 22:52
emm不只是这样,还要将最后一个元素的游标改成零
而且在插入第一个数据的时候,游标会变成一,变成死循 ...
我就直接通过分类解决了,但是要怎样才知道链表的最后一个数呢?
页:
[1]