void InitList(LinkList &L) { L=new LNode; L->next=NULL; }
时间: 2024-03-27 16:35:46 浏览: 66
这也是一个初始化链表的函数,实现的方式与上一个函数不同。这个函数的作用是创建一个只有头节点的链表,即链表头节点的 next 指针为 NULL,表示链表为空。具体实现可以参考如下代码:
```
void InitList(LinkList &L) {
L = new LNode; // 创建头节点
L->next = NULL; // 头节点的 next 指针置为 NULL
}
```
需要注意的是,在使用该函数初始化链表后,需要使用 InsertNode 或者其他操作来添加节点才能构建一个非空的链表。
相关问题
typedef struct Lnode { struct Lnode* next; int data; }Lnode, * LinkList; void InitList(LinkList & L) { L = new Lnode; L->next = NULL; }
L)
{
L = NULL; // 将头指针置为 NULL,表示链表为空
}
void CreateList(LinkList& L, int n)
{
Lnode* p, * q;
L = new Lnode; // 创建头结点
L->next = NULL;
q = L;
for (int i = 0; i < n; i++)
{
p = new Lnode; // 创建新节点
cin >> p->data;
p->next = NULL;
q->next = p;
q = p; // 将新节点插入到链表尾部
}
}
void DestroyList(LinkList& L)
{
Lnode* p, * q;
p = L;
while (p != NULL)
{
q = p->next;
delete p;
p = q; // 释放链表中所有节点的内存空间
}
L = NULL;
}
int ListLength(LinkList L)
{
int len = 0;
Lnode* p = L;
while (p->next != NULL)
{
len++;
p = p->next;
}
return len;
}
bool ListEmpty(LinkList L)
{
return L->next == NULL;
}
void GetElem(LinkList L, int i, int& e)
{
Lnode* p = L->next;
int j = 1;
while (p != NULL && j < i)
{
p = p->next;
j++;
}
if (p == NULL || j > i)
{
cout << "Error: out of range" << endl;
return;
}
e = p->data;
}
int LocateElem(LinkList L, int e)
{
Lnode* p = L->next;
int i = 1;
while (p != NULL && p->data != e)
{
p = p->next;
i++;
}
if (p == NULL)
return 0;
else
return i;
}
void ListInsert(LinkList& L, int i, int e)
{
Lnode* p = L;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL || j > i - 1)
{
cout << "Error: out of range" << endl;
return;
}
Lnode* q = new Lnode;
q->data = e;
q->next = p->next;
p->next = q; // 在第 i 个位置插入元素 e
}
void ListDelete(LinkList& L, int i, int& e)
{
Lnode* p = L;
int j = 0;
while (p->next != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p->next == NULL || j > i - 1)
{
cout << "Error: out of range" << endl;
return;
}
Lnode* q = p->next;
e = q->data;
p->next = q->next;
delete q; // 删除第 i 个位置的元素,并将其值赋给 e
}
void ListTraverse(LinkList L)
{
Lnode* p = L->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void InitList(LinkList *L) { *L = NULL; } // 根据学号进行插入 int InsertById(LinkList *L, Student s) { LNode *p = *L, *pre = NULL; while (p != NULL && p->data.id < s.id) { pre = p; p = p->next; } if (p != NULL && p->data.id == s.id) { return 0; // 学号已存在 } LNode *newNode = (LNode *)malloc(sizeof(LNode)); newNode->data = s; newNode->next = p; if (pre == NULL) { *L = newNode; } else { pre->next = newNode; } return 1; } // 根据成绩进行插入 int InsertByScore(LinkList *L, Student s) { LNode *p = *L, *pre = NULL; while (p != NULL && p->data.score >= s.score) { pre = p; p = p->next; } if (p != NULL && p->data.id == s.id) { return 0; // 学号已存在 } LNode *newNode = (LNode *)malloc(sizeof(LNode)); newNode->data = s; newNode->next = p; if (pre == NULL) { *L = newNode; } else { pre->next = newNode; } return 1; }参考文献
这段代码是一个基于链表实现的学生信息管理系统,包括根据学号和成绩进行插入操作。其中,InitList函数用于初始化链表,InsertById函数用于根据学号插入学生信息,InsertByScore函数用于根据成绩插入学生信息。每个学生信息包括学号和成绩。在插入时,如果学号已经存在,则返回0,表示插入失败。如果插入成功,则返回1。
阅读全文