就是按照严慧敏版的《数据结构》里写了一段链表初始化和删除之类的代码想自己实操试试看,然后输入都是正常的,就是输出的不是想要的查找结果,而是一个 7 位数的随机数,用 debug 也看不出来。C++的基础比较薄弱,望指教~
#include <iostream>
#include <stdio.h>
typedef int Status; //定义状态函数
#define ERROR -1
#define OK 1
typedef enum //定义布尔符号
{
FALSE = 0,
TRUE = 1
} BOOL;
typedef struct LNode //定义链表
{
int data;
struct LNode *next;
} LNode, *LinkList;
Status InitList(LinkList &L) //构建一个空链表
{
L = new LNode; //new出来的需要用delete指令删除
L->next = NULL;
return OK;
}
Status GetElem(LinkList L, int i, int &e) //在带头结点的单链表L中根据序号l.获取元素的值,用e返回L中第l.个数据元素的值
{
int j;
LNode *p; //定义LNode类型的p指针才能调用
p = L->next;
j = 1;
while (p && j < i)
p = p->next;
++j;
if (!p || j > i)
return ERROR;
e = p->data;
return OK;
}
LNode *LocateElem(LinkList L, int e) //在带头结点的单链表L中查找e元素
{
LNode *p;
p = L->next; //初始化,p指向首元结点
while (p && p->data != e)
p = p->next;
return p;
}
Status ListInsert(LinkList &L, int i, int e) //在带头结点的单链表L中第i个位置插入数据域为e的新结点
{
LNode *p = L;
int j = 0;
while (p && (j < i - 1))
{
p = p->next;
++j;
}
if (!p || j > i - 1)
return ERROR;
LNode *s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status ListDelete(LinkList &L, int i) //删除第i个元素
{
LNode *p = L;
LNode *q = new LNode;
int j = 0;
while ((p->next) && (j < i - 1))
{
p = p->next;
++j;
}
if (!(p->next) || (j > i - 1))
return ERROR;
q = p->next; //临时保存被删结点的地址未来释放,避免内存泄漏
p->next = q->next;
delete q;
return OK;
}
//创建单链表的方式
void CreateList_H(LinkList &L, int n) //前插法创建单链表
{
L = new LNode;
L->next = NULL;
for (int i = 0; i < n; ++i)
{
LNode *p = new LNode; //创建数据新结点
scanf("%d", &p->data); //插入数据
p->next = L->next;
L->next = p;
}
}
void CreateList_R(LinkList &L, int n) //后插法创建单链表
{
L = new LNode;
L->next = NULL;
LNode *r = new LNode;
r = L;
for (int i = 0; i < n; ++i)
{
LNode *p = new LNode;
scanf("%d", &p->data);
p->next = NULL;
r->next = p;
r = p;
}
}
int main()
{
printf("主程序开展:\n");
LinkList first;
printf("请输入长度为4的数据\n");
CreateList_H(first, 4);
int a, e;
printf("请输入要搜索的项:\n");
scanf("%d", &a);
GetElem(first, a, e);
printf("%d", e);
return OK;
}
主程序开展:
请输入长度为4的数据
4 3 2 1
请输入要搜索的项:
3
45509436%
我感觉就是初始化都没有成功,因为曾经尝试用
if(GetElem(first, a, e)==OK)
{
printf("查找成功!!!\n");
printf("%d", e);
return OK;
}
else
{
printf("查找错误!!!\n");
return ERROR;
}
返回的就是“查找错误!”,
但是我也不清楚是哪个代码初始化失败了。因为我是跨专业考试自学的,没有同学可以问。已经困扰我一个春节了,感谢各位!