#include <stdio.h>
#include <iostream>
#include<malloc.h>
using namespace std;
typedef int ElemType;
typedef struct LNODE{//这里的LNODE称为结构标记
ElemType data;//节点的数据域
struct LNODE* next;//定义一个指向结构体的指针变量,保存下一个节点的地址信息
}LNode,*LinkList; //这里的LNode是结构体的别名,不是结构变量名
//而LinkList是struct LNode * 的别名
//整个上述结构体可等价为:
/*
struct LNode{};
typedef struct LNODE LNode;
之后定义结构体变量只需使用“LNode 结构变量名”
而不需要“struct LNODE 结构变量名”这样子;
typedef struct LNODE * LinkList;
同理,定义结构体指针变量只需使用“LinkList 指针变量名”
*/
void select(LinkList);
LinkList createNode(int data) {//这里的函数是指针函数,返回值为一个LNode的指针,即头结点的位置
LinkList Node = (LinkList)malloc(sizeof(LNode));//创建结点
if (Node == NULL) {
cout << "结点分配空间失败" << endl;
return NULL;
}
else
{
Node->data = data;
Node->next = NULL;
return Node;
}
}
void insert(LinkList head, LinkList tail) {//头指针,尾指针
int data=0;
while (true) {
cout << "请输入插入的值:" << endl;
cin >> data;
if (cin.get()=='\n')
{
cout << "获取到终止字符" << endl;
break;
}
LinkList Node = createNode(data);
tail->next = Node;
//cout << "Node\t" << Node << endl;
tail = tail->next;
//cout << "tail:\t" << tail << endl;
head->data++;//头结点中存储整个链表长度。
//cout << "head:\t" << head << endl;
cout << "插入完成" << endl;
select(head);
}
}
void select(LinkList p_FNode) {
LinkList q = p_FNode;
q = q->next;
//cout << "头结点next域值:\t" << p_FNode->next << endl;
//cout << "q:\t" << q << endl;
cout << "所有的节点如下:" << '\t';
while (q) {
cout << q->data << '\t';
q = q->next;
//cout << "q:\t" << q << endl;
}
cout << endl;
}
void remove(LinkList head) {
cout << "请输入要删除的节点:\n";
int j;
LinkList q = head;
cin >> j;
for (int i = 1; i < j; i++)
{
q = q->next;
}
q->next = q->next->next;
select(head);
}
void update(LinkList head) {
cout << "请输入要修改的位置\n";
int j;
LinkList q = head;
cin >> j;
for (int i = 0; i < j; i++)
{
q = q->next;
}
cout << "请输入新值:\n";
cin >> q->data;
select(head);
}
int main() {
LinkList head=createNode(0);//初始化带头结点的链表,并将头指针指向头结点
LinkList tail=head;//将尾指针指向头结点
LinkList p_FNode = head;
cout << "初始化信息:\nhead:\t" << head << endl;
cout << "tail:\t" << tail<<endl;
cout << "p_FNode:\t" << p_FNode << endl;
insert(head, tail);
remove(head);
update(head);
}
数据结构(c语言)单链表的实现
最新推荐文章于 2023-04-06 13:34:21 发布