实验要求:
1.单链表的存储结构定义。
2.从键盘上依次输入21、18、30、75、42、56,逆序创建单链表(前插法),并输出单链表中的各元素值。
3.分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。
4.删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。
代码实现:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
#define Erro 0;
//定义链表结构
typedef struct Node {
int data;
Node* next;
}Node,*Linklist;
//创建单链表的函数
void creatList(Linklist &L,int m) {
//链表的初始化
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
cout << "请输入元素" << " ";
for (int i = 0; i < m; i++) {
Node* s = (Node*)malloc(sizeof(Node));//创建一个新的节点s
cin >> s->data;//往新节点s输入元素
//将新结点插入到头节点之后
s->next = L->next;
L->next = s;
}
}
//输出链表的函数
void printList(Linklist L) {
Node* p = L->next;//指向指针域
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//链表的插入
int insertList(Linklist *L,int e,int y) {//在e位置插入y
Node* p = *L;
int i = 0;
// 找到第e-1个节点
while (p && i < e - 1) {
p = p->next;
i++;
}
if (!p || i > e - 1)
return 0;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data= y;
newNode->next = p->next;
p->next = newNode;
return 1;
}
//链表的删除
int deleteList(Linklist&L,int e) {//e节点删除
Node* p = L;
int i = 0;
while (p && i < e - 1) {
p = p->next;
i++;
}
if (!p || (i> e - 1)) {//下一个结点不存在或者e<1
return 0;
}
Node* q;
q= p->next;
p->next = q->next;
delete q;
return 1;
}
int main() {
int n;
Linklist L;
cout << "请输入元素个数:" << endl;
cin >> n;
creatList(L, n);
cout << "链表中的元素(前插法):";
printList(L);
cout << "请输入插入元素的位置:";
int j,k;
cout << endl;
cin >> j;
cout << "插入的元素:";
cin >> k;
if (insertList(&L, j, k)) {
cout << "插入成功,此时链表元素为:";
printList(L);
}
else {
cout << "插入失败,此时链表为:";
printList(L);
cout << endl;
}
cout << "请输入插入元素的位置:";
int num1, num2;
cout << endl;
cin >> num1;
cout << "插入的元素:";
cin >> num2;
if (insertList(&L, num1, num2)) {
cout << "插入成功,此时链表元素为:"; printList(L);
}
else {
cout << "插入失败,此时链表元素为:";
printList(L);
cout << endl;
}
cout << "要删除第几个数据元素:";
int del1,del2;
cin >> del1;
if (deleteList(L, del1)) {
cout << "删除成功,此时链表元素为:";
printList(L);
}
else {
cout << "插入失败" << endl;
}
cout << "要删除第几个数据元素:";
cin >> del2;
if (deleteList(L, del2)) {
cout << "删除成功,此时链表元素为:";
printList(L);
}
else {
cout << "插入失败,此时链表元素为:";
printList(L);
}