数据结构链表操作的实现(超详细)
Posted 垚垚是小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构链表操作的实现(超详细)相关的知识,希望对你有一定的参考价值。
#include<iostream>
using namespace std;
typedef struct Node {
int date;
struct Node* next;
}Node;
//初始化
void ListInit(Node *ps) {
ps = (Node*)malloc(sizeof(Node));
ps->next = NULL;
if (ps == NULL) {
cout << "失败" << endl;
}
else
cout << "成功" << endl;
}
//创建链表
void CreatList(Node *ps,int x) {
for (int i = 0; i < x; i++) {
Node* p;
p = (Node*)malloc(sizeof(Node));
//创建一个指针 p 指向新建的Node
p->next = NULL;
cin >> p->date;
ps->next = p;
ps = p;//将p的地址给ps,ps指向p。
}
}
//遍历链表
void PrintList(Node *ps) {
Node* p = ps->next;
while(p!=NULL) {
cout << p->date;
p = p->next;
}
cout << endl;
}
//头插法
void insertPront(Node* ps, int data) {
Node* p = (Node*)malloc(sizeof(Node));
p->date = data;
p->next = ps->next;
ps->next = p;
}
//尾插法
void insertBack(Node* head, int data) {
Node* newnode = (Node*)malloc(sizeof(Node));
newnode->next = NULL;
newnode->date = data;
Node* p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newnode;
p = newnode;
}
//删除链表
void deleteLink(Node* head) {
Node* curr;
while (head->next != NULL) {
curr = head->next;
head->next = curr->next;
free(curr);
}
cout << "成功" << endl;
}
//判断链表是否为空
void ListEmpty(Node* head) {
if (head->next == NULL) {
cout << "为空";
}
else cout << "不为空";
}
//查找
Node* ListLocate(Node* L, int e) {
Node* p = L->next;
while (p != NULL && p->date != e) //从第1个结点开始查找数据域为e的结点
p = p->next;
return p;
}
//链表的插入
void LinkedListInsert(Node* L, int i, int x) {
int tempi = 0;
for (tempi = 1; tempi < i; tempi++) {
L = L->next; //查找第i个位置的前驱结点
}
Node* p; //插入的结点为p
p = (Node*)malloc(sizeof(Node));
p->date = x;
p->next = L->next;
L ->next = p;
}
//链表的插入
void ListInsert(Node *ps,int pos,int x ) {
Node* l = (Node*)malloc(sizeof(Node));
l->next = NULL;
l->date = x;
for (int i = 1; i < x; i++) {
ps = ps->next;
}
l->next = ps->next;
ps->next = l;
}
int main() {
Node l;
ListInit(&l);//初始化链表
CreatList(&l, 3);//创建链表(给链表赋值)
PrintList(&l);//打印链表
insertPront(&l, 7);//前插法
insertBack(&l, 6);//尾插法
ListEmpty(&l);//判断是否为空
cout << endl;
ListInsert(&l, 3, 3);//在任意位置插入数字
PrintList(&l);
cout << ListLocate(&l, 1) << endl;
deleteLink(&l);//删除链表
}
以上是关于数据结构链表操作的实现(超详细)的主要内容,如果未能解决你的问题,请参考以下文章