版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Suyebiubiu/article/details/80468719
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
/*
双链表
1.尾插法建立双链表
2.在双链表中查找第一个值为X的节点,从第一个节点开始,边扫描边比较,若找到这样的节点
则返回节点指针,否则返回NULL
3.在双链表中p所指的节点之后插入一个节点s
4.删除双链表中p节点的后继节点
*/
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct node {
int data;
struct node *prior;
struct node *next;
}node ,*LinkedList;
//创建一个双链表
LinkedList createDList(int a[],int n) {
LinkedList s,r;
LinkedList head=(LinkedList)malloc(sizeof(node));
head->prior = NULL;
head->next = NULL;
r = head;//始终指向终端结点,开始时候头结点也是尾结点
for (int i = 0; i < n; i++){
s = (LinkedList)malloc(sizeof(node));
s->data = a[i];
//下面将s插入到head的尾部
r->next = s;
s->prior = r;
r = s;
}
r->next = NULL;
return head;
}
//展示双链表
void showList(LinkedList head) {
LinkedList p=head->next;
while (p!=NULL) {
cout << p->data << " ";
p = p->next;
}
}
//查找一个结点
LinkedList findNode(LinkedList head,int x) {
LinkedList p = head->next;
while (p!=NULL) {
if (p->data==x) {
break;
}
p = p->next;
}
return p;
}
//插入一个结点
void insertList(LinkedList head,int num,int position) {
LinkedList p = head;
for (int i = 0; i < position-1;i++) {
p = p->next;
}
//创建一个结点s
LinkedList s = (LinkedList)malloc(sizeof(node));
s->data = num;
s->next = p->next;
s->prior = p;
p->next = s;
s->next->prior = s;//假如p指向最后一个结点,本行可以去掉
}
//删除一个结点
void deleteList(LinkedList head,int position) {
LinkedList p = head;
LinkedList q;
for (int i = 0; i < position - 1;i++) {
p = p->next;
}
//删除p结点的后继结点
q = p->next;
p->next = q->next;
q->next->prior = p;
free(q);
}
int main()
{
int a[] = {1,3,5,9};
int n = sizeof(a)/ sizeof(int);
//cout << n << endl;
LinkedList head = createDList(a,n);//创建一个双链表
showList(head);//展示这个双链表
//1.查找双链表
cout << "\n请输入你要查找的值(返回结点node):" << endl;
int x;
cin >> x;
LinkedList node= findNode(head,x);
//showList(node);//当我输入1时候,这个打印359 是对的,因为打印里面我们设置的是头结点为空不打印,说明返回的结点是要查找的结点
//2.插入结点算法
int num, position;
cout << "请输入要插入的位置:" << endl;
cin >> position;
cout << "请输入要插入的数值:" << endl;
cin >> num;
insertList(head,num,position);
showList(head);
//3.删除一个结点的算法
cout << "\n请输入删除的位置:" << endl;
cin >> position;
deleteList(head,position);
showList(head);
//防止程序一闪而过
int f;
cin >> f;
return 0;
}