#include<stdio.h>
#include<stdlib.h>
/**
* 线性表
* 单链表的基本操作与实现
*/
// 函数结果状态码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
// Status是函数的类型,其值是函数结果状态码
typedef int Status;
typedef struct{
char num[8]; // 数据域
char name[8]; // 数据域
int score; // 数据域
} ElemType;
// 声明结点的类型和指向结点的指针类型
typedef struct LNode{
ElemType data; // 数据域
struct LNode *next; // 指针域
} LNode,*LinkList; // LinkList是指向结构体LNode的指针类型
/**
* 单链表的初始化
*/
Status InitList_L(LinkList &L){
L = (LinkList)malloc(sizeof(LNode)); // 或L = new LNode
L->next = NULL;
return OK;
}
/**
* 单链表判空
*/
int ListEmpty(LinkList L){
if(L->next) return 0;
else return 1;
}
/**
* 单链表的销毁
*/
Status DestroyLsit_L(LinkList &L){
LinkList p; // 或LNode *p
while(L != NULL){
p = L;
L = L->next;
free(p); // 或delete p
}
return OK;
}
/**
* 清空链表
*/
Status ClearList(LinkList &L){
// 或LNode *p,*q;
LinkList p,q; // p存放当前要删除的结点,q存放p的下一个结点
p = L->next; // p指向首元结点
while(p){
q = p->next;// q指向p指向的下一结点
free(p); // 或delete p,删除p当前指向的结点
p = q;
}
L->next = NULL; // 头结点的指针域为空
return OK;
}
/**
* 求单链表的表长
*/
int ListLength_t(LinkList L){
LinkList p;
p = L->next; // p指向首元结点
int i = 0;
while(p){
i++;
p = p->next;// 指向p指向的下一结点
}
return i;
}
/**
* 取值——取链表的第i个元素值
*/
Status GetElem_L(LinkList L,int i,ElemType &e){
LinkList p;
p = L->next;
int j = 1; // 计数器
while(p != NULL && j < i){
// 向后扫描,直到p指向第i个元素或p为空
p = p->next;
++j;
}
// 第i个元素不存在
if(!p || j > i) return ERROR;
// 取第i个元素赋值到e
e = p->data;
return OK;
}
/**
* 按值查找
* 根据指定数据获取该数据所在的位置(该数据的地址)
*/
LNode *LocateElem_L(LinkList L,ElemType e){
// 结果:找到——返回L中值为e的数据元素的地址;失败——返回NULL
LinkList p = L->next;
while (p != NULL && p->data != e)
p = p->next;
return p;
}
```c
/**
* 按值查找
* 根据指定数据获取该数据所在的位置序号(是第几个数据元素)
*/
int LocateElem_List(LinkList L,ElemType e){
// 结果:找到——返回L中值为e的位置序号;失败——返回0
LinkList p;
p = L->next;
int i = 1; // 计数器
while (p != NULL && p->data != e){
p = p->next;
i++;
}
if(p) return i;
else return 0;
}
哪位懂的兄弟可以帮我给下方法嘛?一直没解决。