#include<stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int ElemType ; typedef struct node { ElemType data; struct node *node; } Status InitList(LinkList *l) { *l=(linklist)malloc(sizeof(node)); (*l)-next=null; } void createlist(LinkList l) { node *s; char c; int flag=1; while(flag) { c=getchar(); if(c!='s') } s=(node )malloc(sizeof(node)); s->data=c; s->next=l->next; l->next=s; } else flag=0; } node get data(linklist l,int i) { int j; node *p; if(i<=0)return null; p=l ;j=0; while((p-next!=null)&&(j<i)) { p=p->next; j++; } if(i==j) return p; else return null; } int main(void) { int n, LinkList L; printf("输入要创建的单链表的元素个数\n"); scanf("%d",&n); printf("请输入各个元素 \n"); CreateList(&L,n); printf("创建的单链表成功\n"); printf("第二个元素值:%d\n",L->next->next->data); printf("请输入要查找的数据:\n"); scanf("%d",&e); if(LocateElem(L,e)==NULL) printf("查找失败\n"); else printf("数据所在位置为%d\n",LocateElem(L,e)); return 0; }
时间: 2023-12-05 12:04:31 浏览: 183
以下是修改后的代码,注释中标注了修改的地方和问题:
```c
#include<stdio.h>
#include<stdlib.h> // 修改:头文件 <malloc.h> 应改为 <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct node {
ElemType data;
struct node* next; // 修改:指针变量名应为 next,而不是 node
} Node; // 修改:结构体名应为 Node,而不是 node
typedef Node* LinkList; // 修改:LinkList 应为 Node* 类型
// 修改:InitList 应该返回 Status 类型
Status InitList(LinkList* l) {
*l = (LinkList)malloc(sizeof(Node));
(*l)->next = NULL; // 修改:NULL 应该用大写字母
return OK;
}
void CreateList(LinkList L, int n) { // 修改:函数名应该为 CreateList
Node* s;
char c;
int flag = 1;
while (flag) {
c = getchar();
if (c != 's') {
s = (Node*)malloc(sizeof(Node));
s->data = c;
s->next = L->next;
L->next = s;
}
else flag = 0;
}
}
Node* GetNode(LinkList L, int i) { // 修改:函数名应该为 GetNode
int j = 0;
Node* p = L->next; // 修改:初始化 p 时应该为 L->next,而不是 L
if (i <= 0) return NULL; // 修改:返回值为 NULL,而不是 null
while (p && j < i - 1) { // 修改:应该为 i - 1
p = p->next;
j++;
}
return p;
}
int LocateElem(LinkList L, ElemType e) { // 修改:函数名应该为 LocateElem
int i = 1;
Node* p = L->next;
while (p) {
if (p->data == e) return i;
p = p->next;
i++;
}
return 0; // 修改:查找失败时返回 0,而不是 NULL
}
int main(void) {
int n, e; // 修改:需要定义变量 e
LinkList L;
printf("输入要创建的单链表的元素个数\n");
scanf("%d", &n);
InitList(&L);
printf("请输入各个元素 \n");
CreateList(L, n);
printf("创建的单链表成功\n");
printf("第二个元素值:%c\n", L->next->next->data); // 修改:应该用 %c 输出字符型数据
printf("请输入要查找的数据:\n");
scanf("%d", &e);
if (LocateElem(L, e) == 0) printf("查找失败\n"); // 修改:查找失败时输出“查找失败”
else printf("数据所在位置为%d\n", LocateElem(L, e));
return 0;
}
```
阅读全文