#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 typedef int datatype; typedef struct link{ datatype info; struct link *next; }link_node; void *init(link_node L) { return NULL; } void input(link_node L,link_node *head)//注意这里是否需要将“L”设置为*L { int j=1; int i; link_node *p; p=head; printf("请输入链表中的元素个数:"); scanf("%d",&i); printf("请输入链表中的元素:\n"); for(j=1;j<=i;j++) { scanf("%d",&p->info); p=p->next; } } void display(link_node L,link_node *head)// { link_node *p=head; if(!p) { printf("单链表不存在!\n"); } else { printf("单链表中的元素为:"); while(p) { printf("%d",p->info); p=p->next; } } } link_node *insert(link_node L,datatype x,link_node *head,link_node i) { link_node *p,*q,*pre; pre=NULL; q=head; if(!q) { printf("单链表中找不到该结点\n"); } else{ while(q&&q->info!=x) { pre=q; q=q->next; } } if(q) { if(!pre) { p->next=q; p=head; } else { p->next=q; pre->next=p; } } } int main() { int i,x; link_node L,*head,*p,*q; init(L); input(L,head); display(L,head); printf("请输入要在第%d个结点前插入:",i); printf("请输入要插入的值%d",x); insert(L,x,head,i); display(L,head); return 0; }
时间: 2024-01-04 18:04:57 浏览: 45
这段代码存在一些问题,需要进行修改:
1. `init()` 函数应该返回一个 `link_node*` 类型的指针,而不是 `void*` 类型的指针。
2. 在 `input()` 函数中,需要将 `L` 设置为 `*head`,因为传入函数的是指针类型的 `head`,而不是结构体类型的 `L`。同时,在输入元素时需要将指针 `p` 指向下一个节点,否则会一直向同一个节点输入数据。
3. `insert()` 函数中,需要先创建一个新的节点 `p`,并将要插入的值 `x` 赋给 `p->info`。同时,应该根据输入的位置 `i` 来确定插入的位置,而不是只考虑到要插入的值 `x`。在找到要插入的位置后,将 `p` 插入到链表中。
下面是修改后的代码:
相关问题
如何运行#include<stdlib.h> #include<stdio.h> #define maxSize 100 //顺序表存储的最大容量 typedef int DataType;//每个元素的数据类型 typedef struct{ DataType data[maxSize];//线性表的存储数组 int n;//数组中当前已有表的元素数 }SeqList;//创建一个新表
要运行这段代码,你需要进行以下步骤:
1. 打开一个文本编辑器,比如Notepad++或者Visual Studio Code。
2. 将上述代码粘贴到文本编辑器中。
3. 将文件保存为一个以`.c`为扩展名的文件,比如`main.c`。
4. 打开命令提示符或终端窗口。
5. 使用`cd`命令导航到保存了代码文件的目录。
6. 输入以下命令来编译代码并生成可执行文件:
```
gcc main.c -o main
```
这将使用GCC编译器编译`main.c`文件,并生成一个名为`main`的可执行文件。
7. 输入以下命令来运行可执行文件:
```
./main
```
这将执行生成的可执行文件,并在命令提示符或终端窗口中显示输出结果。
请注意,你需要确保已经安装了GCC编译器,并且将其添加到系统的环境变量中,以便可以在命令提示符或终端窗口中直接使用。如果你没有安装GCC编译器,你可以通过安装MinGW来获取它。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 100 typedef char datatype; typedef struct l{ datatype str[MAXSIZE]; int length; }seqstring; int index(seqstring S,seqstring T) { int i,j,succ; i=0; succ=0; while(i<=S.length-T.length&&!succ) { j=0; succ=1; while(j<=T.length&&succ) { if(T.str[j]==S.str[i+j]) { ++j; } else { succ=0; } i++; } } if(succ) { return(i); } else { return -1; } } int main() { seqstring S,T; int i,max; max=20; S.str={a,b,c,d,s,d,f}; S.length=strlen(&S); printf("字符串S的字符个数为:%d\n",S.length); T.str={c,d}; scanf("%s",&T); T.length=strlen(&T); printf("字符串S的字符个数为:%d",T.length); index(S,T); return 0; }
这个程序中有一些问题。
首先,在定义字符串S和T时,你不能直接使用大括号初始化字符串,而应该使用双引号或单引号。例如:
```
S.str = "abcdsdf";
```
其次,在计算S和T的长度时,你应该使用strlen函数,而不是使用&运算符。例如:
```
S.length = strlen(S.str);
```
最后,在调用index函数时,你应该将其返回值保存在一个变量中,然后输出这个变量的值。例如:
```
int pos = index(S, T);
printf("T在S中的位置为:%d\n", pos);
```
这样才能正确输出函数的结果。
阅读全文