typedef struct LNode{ int number;//序号 int password;//密码 struct LNode *next; }LNode,*LinkList; LinkList InitList(int n){ int i; LinkList L,ptr,p; ptr=(LinkList)malloc(sizeo
时间: 2023-05-15 08:07:21 浏览: 96
f(LNode)); L=ptr; for(i=1;i<n;i++){ p=(LinkList)malloc(sizeof(LNode)); ptr->next=p; ptr=p; ptr->number=i; ptr->password=rand()%1000; } ptr->next=L; return L; } 这段代码是什么意思?
这段代码是一个链表的初始化函数,用于创建一个包含n个节点的循环链表。其中,LNode是链表节点的结构体,包含序号和密码两个成员变量,next是指向下一个节点的指针。InitList函数返回一个LinkList类型的指针,指向链表的头节点。在函数中,先创建一个头节点L,并将ptr指向头节点,然后循环n-1次,每次创建一个新节点p,并将ptr的next指向p,再将ptr指向p,最后将尾节点的next指向头节点L,形成循环链表。在创建每个节点时,给它的number赋值为i,password赋值为一个随机数。
相关问题
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;
}
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef enum{false=0,true=1}bool; typedef struct Lnode{ ElemType data; struct Lnode *next; int length; }Lnode,*Linklist; //初始化单链表 bool InitList(Lnode *L); //(头插法)创建单链表 void CreateListListF(
(Linklist L, int n) {
Linklist p;
int i;
L = (Lnode *)malloc(sizeof(Lnode));
L->next = NULL;
printf("请输入链表的元素:\n");
for (i = 0; i < n; i++) {
p = (Lnode *)malloc(sizeof(Lnode));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
L->length = n;
return true;
}
阅读全文