您的位置:首页 > 理论基础 > 数据结构算法

数据结构(C++)——链表

2020-07-30 15:11 901 查看

数据结构(C++)——链表

链表结构体的定义:

// struct ndoe
typedef struct Node
{
int data;
struct Node* next;
}Node, *PNode;

头插法插入结点:
1.建立头结点,并分配空间
2.建立新结点,新节点->next指向上一个节点,头结点->next指向新结点

PNode List_HeadInsert(PNode &head)
{
head = (Node*)malloc(sizeof(Node)); //head node
if (!head)                   /* 检查指标          */
{
printf("failure! \n");
exit(1);
}
PNode new_node;
head->next = NULL; // initialize head node
int qon;
cout << "please enter the quantity of numbers:";
cin >> qon;
for (int i = 0; i < qon; i++)
{
cout << "please enter a number:" ;
int x;
cin >> x;
new_node = (Node*)malloc(sizeof(Node));
if (!new_node)                   /* 检查指标          */
{
printf("failure! \n");
exit(1);
}
new_node->data = x;
new_node->next = head->next;
head->next = new_node;
}
return head;
}

尾插法插入节点:
1.建立头结点,并分配空间
2.建立新结点,给新结点->data赋值。设置新结点next为NULL,最后一个节点的next指向新节点

PNode List_TailInsert(PNode &head)
{
head = (Node*)malloc(sizeof(Node)); //head node
if (!head)                   /* 检查指标          */
{
printf("failure! \n");
exit(1);
}
PNode new_node;
PNode ptr;
head->next = NULL; // initialize head node
ptr = head;
int qon;
cout << "please enter the quantity of numbers:";
cin >> qon;
for (int i = 0; i < qon; i++)
{
int x;
cout << "please enter a number:" << endl;
cin >> x;;
new_node = (Node*)malloc(sizeof(Node));
if (!new_node)                   /* 检查指标          */
{
printf("failure! \n");
exit(1);
}
new_node->data = x;
new_node->next = NULL;
ptr->next = new_node;
ptr = ptr->next; // point ro the next node
}
return head;
}

释放空间:

void Free_lnklst(PNode &head)
{
PNode p, temp;
p = head->next;
int i = 1;
while (i == 1)
{
if(p->next == NULL)
i = 0;
temp = p;
p = p->next;
free(temp);
}
}

按序号搜索:

PNode Serch_order(PNode head, int i) // search by serial number
{
int count = 1;
Node* p = head;
if (i == 0)
return head;
if (i < 0)
return NULL;
while (count <= i)
{
if (p == NULL)
return NULL;
p = p->next;
count++;
}
return p;
}

按值搜索

//search by value return index
int Serch_value(PNode head, int number)
{
PNode p = head->next;
int i(1);
while (p->data != number)
{
if (p->next == NULL)
return NULL;
p = p->next;
i++;
}
return i;
}

插入结点:
1.建立新结点
2.新结点指向原ith结点,ith的前一个节点指向新结点。

void Insert(PNode head, int ith)
{
PNode new_node;
cout << "please enter the data:";
int x;
cin >> x;
new_node = (Node *)malloc(sizeof(Node));
new_node->data = x;
new_node->next = Serch_order(head, ith - 1)->next;
Serch_order(head, ith - 1)->next = new_node;
}

删除节点:

void Delete_node(PNode head, int ith)
{
PNode ptr, temp_ptr;
ptr = Serch_order(head, ith - 1);
temp_ptr = ptr->next;
ptr->next = Serch_order(head, ith + 1);
free(temp_ptr);
}

求表长:

int Dertermin_len_lnklst(PNode head)
{
PNode ptr;
ptr = head->next;
int len = 0;
while (ptr != NULL)
{
len++;
ptr = ptr->next;
}
return len;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: