运行时发生异常
#include"project——f.h"
#include
#include
#include
typedef char ElemType;
//1.定义线性表的链式存储结构(LinkList)
typedef struct Lnode {
char data;
struct Lnode* next;
}Lnode, * LinkList;
//2.初始化链表
void InitList(LinkList L);
/3.使用头插法或尾插法建表,往表L中存入若干元素,
例如按顺序输入:“a,b,c,d,e,f,g”/
void CreateFromHead(LinkList L);
/4. 使用输出函数,输出表L中所有元素/
void Display(LinkList L);
//5.查找指定位置的元素,例如,查找第5个元素,则输出e
Lnode* GetData(LinkList L, int s,char *e);
int ListLength(LinkList L);
int main() {
ElemType e;
LinkList L; //定义链表
//*2.初始化链表函数调用
InitList(&L);
/*3. 使用头插法建表,往表L中存入若干元素,
例如按顺序输入:“a,b,c,d,e,f,g”*/
int n;//输入元素个数
printf("请输入表的长度");
scanf("%d", &n);
getchar();
printf("请输入表元素");
CreateFromHead(L, n);
/*4.输出元素*/
Display(L);
/*5. 查找指定位置的元素*/
char s;
printf("请输入查找的为位置s:");
char t;
scanf("%c", &s);
t = s;
GetData(L,t,&e);
printf("\n%c\n",e);
return 0;
}
//2.初始化链表
void InitList(LinkList* L) {
*L = (LinkList)malloc(sizeof(Lnode));
(*L)->next = NULL;
}
/3头插法插入元素/
void CreateFromHead(LinkList L, int n) {
int i;
char c;
Lnode* p;
for (i = 0; i < n; i++) {
p = (Lnode*)malloc(sizeof(Lnode));
c = getchar();
getchar(); //缓冲空格和换行
p->data = c;
p->next = L->next;
L->next = p;
}
}
/4.输出元素/
void Display(LinkList L) {
Lnode* p;
p = L->next;
while (p != NULL) {
printf("%c ", p->data);
p = p->next;
}
}
/5. 查找指定位置的元素/
Lnode* GetData(LinkList L, int s,char x) {
int i = 1;
Lnode q;
q = L->next;//此处发生异常
for (i = 1; i < s; i++) {
q = q->next;
}
if (!q || i > s) {
return 0;
}
else
{
*x = q->data;
return 1;
}
}
此处发生异常
编译器为vs2022
q = q->next;
希望可以解决异常
是不是S比较大 导致q为空 但是空没有判断继续取所以异常了? 贴的代码不是很清楚
修改完善如下,供参考:
//#include"project——f.h"
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
//1.定义线性表的链式存储结构(LinkList)
typedef struct Lnode {
char data;
struct Lnode* next;
}Lnode, * LinkList;
//2.初始化链表
void InitList(LinkList* L);
// 3.使用头插法或尾插法建表,往表L中存入若干元素,
//例如按顺序输入:“a, b, c, d, e, f, g” /
void CreateFromHead(LinkList L, int n);
// 4. 使用输出函数,输出表L中所有元素 /
void Display(LinkList L);
//5.查找指定位置的元素,例如,查找第5个元素,则输出e
Lnode* GetData(LinkList L, int s, char* e);
//int ListLength(LinkList L);
int main() {
ElemType e;
LinkList L; //定义链表
//*2.初始化链表函数调用
InitList(&L);
/*3. 使用头插法建表,往表L中存入若干元素,
例如按顺序输入:“a,b,c,d,e,f,g”*/
int n;//输入元素个数
printf("请输入表的长度:");
scanf("%d", &n);
getchar();
printf("请输入表元素:");
CreateFromHead(L, n);
/*4.输出元素*/
Display(L);
/*5. 查找指定位置的元素*/
int s; //char s; 修改
printf("请输入查找的为位置s:");
//char t; 修改
scanf("%d", &s); //scanf("%c", &s); 修改
//t = s; 修改
GetData(L, s, &e); //(L, t, &e) 修改
printf("%c\n", e);
return 0;
}
//2.初始化链表
void InitList(LinkList* L) {
(*L) = (LinkList)malloc(sizeof(Lnode));
(*L)->next = NULL;
}
// 3头插法插入元素 /
void CreateFromHead(LinkList L, int n) {
int i;
char c;
Lnode* p;
for (i = 0; i < n; i++) {
p = (Lnode*)malloc(sizeof(Lnode));
scanf(" %c", &c); //c = getchar(); 修改
//getchar(); //缓冲空格和换行 修改
p->data = c;
p->next = L->next;
L->next = p;
}
}
// 4.输出元素 /
void Display(LinkList L) {
Lnode* p;
p = L->next;
while (p != NULL) {
printf("%c ", p->data);
p = p->next;
}
printf("\n"); //修改
}
// 5. 查找指定位置的元素 /
Lnode * GetData(LinkList L, int s, char* x) {
int i = 1;
Lnode* q;
q = L->next;//此处发生异常
for (i = 1; q && i < s; i++) { //修改 (i = 1;i < s; i++)
q = q->next;
}
if (!q || i > s) {
*x = NULL; //修改
return NULL; //修改
}
else
{
*x = q->data;
return q; //修改
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话: