#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-09 07:03:51 浏览: 95
这段代码存在一些语法错误,我先列举一下:
1. 函数 `InitList` 的返回类型应该是 `Status`,而不是 `void`。
2. 在 `InitList` 函数中,链表头节点指针的 `next` 字段应该是 `NULL`,而不是 `null`。
3. 函数 `createlist` 中的 `node` 应该是 `node *`。
4. 函数 `createlist` 中的 `l` 应该是 `LinkList` 类型,而不是 `LinkList` 的指针类型。
5. 函数 `get data` 中的 `null` 应该是 `NULL`。
6. 函数 `main` 中的 `CreateList` 应该是 `createlist`。
7. 函数 `main` 中的 `e` 没有定义。
除此之外,还有一些问题需要注意:
1. 函数 `InitEND;
注意:以上SQL语句仅供参考,具体实现可能需要根据实际情况进行调整。
相关问题
优化这段代码#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<conio.h> #define OK 1 #define error 0 #define MVNum 100 #define MAXSIZE 10 typedef int OtherInfo,QElemtype; typedef char VerTexType; //结构体定义 typedef struct ArcNode{ int adjvex;
首先,该段代码中包含了一些不必要的头文件,例如:conio.h,malloc.h等。建议只保留stdio.h和stdlib.h。
其次,可以将#define OK 1和#define error 0替换为枚举类型,使代码更加清晰易读。
最后,在结构体定义中,可以将OtherInfo和QElemtype合并为一个类型,避免定义过多类型。同时,也可以将结构体中的变量类型进行优化,例如将int类型的adjvex改为short或者char类型。
重构后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
#define MAX_ARC_NUM 10
typedef enum {
ERROR = 0,
OK = 1
} Status;
typedef char VertexType;
typedef int ArcType;
typedef struct ArcNode {
int adjvex;
struct ArcNode* nextarc;
ArcType* info;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode* firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
```
希望可以帮到你。
请对以下代码进行修改#include<stdio.h> #include<math.h> #include<malloc.h> #include<stddef.h> #define OK 1 #define FALSE 0 typedef int Status; typedef int Elemtype; typedef struct LNode { Elemtype data; struct LNode* next; }LNode,*LinkList; LinkList L; Status InitList(LinkList*L) { L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; return OK; }
这段代码的问题在于,`LinkList L`在全局作用域中定义,而在`InitList()`函数中又重新定义了一个`LinkList`类型的指针`L`,这会导致程序出现错误。应该将`LinkList L`的定义移动到`main()`函数中,并将其作为参数传递给`InitList()`函数。同时,函数返回值应该是`LinkList`类型的指针。
修改后的代码如下:
```
#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include <stddef.h>
#define OK 1
#define FALSE 0
typedef int Status;
typedef int Elemtype;
typedef struct LNode {
Elemtype data;
struct LNode* next;
} LNode, *LinkList;
Status InitList(LinkList* L) {
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
return OK;
}
int main() {
LinkList L;
InitList(&L);
return 0;
}
```
这里将`LinkList L`的定义移动到了`main()`函数中,并将其传递给`InitList()`函数。同时,函数返回值改为指向`LinkList`类型的指针。在`main()`函数中,我们调用`InitList()`函数来初始化链表,然后程序正常结束。
阅读全文