原题链接:数据结构-链表的基本操作
#include <iostream>
#include <cstring>
#include <string>
#include <stdlib.h>
using namespace std;
int len = 0;
typedef struct node {
int data;
node* next;
};
void create_list(node*& p) {
node* p1 = p, * s;
scanf("%d", &len);
for (int i = 0; i < len; i++)
{
s = (node*)malloc(sizeof(node));
cin >> s->data;
s->next = p1->next;
p1->next = s;
}
}
void show_list(node*& n) {
node* p;
p = n->next;
if (p == NULL) //链表为空
{
cout << "Link list is empty\n";
}
else {
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << "\n";
}
}
//删除指定位置的数
void delete_list(node *& n,int i) {
node *p = n, *q;
int j = 0;
if (len == 0 || i > len)
{
printf("delete fail\n");
}
else {
while (j < i) //定位到要删除的位置
{
q = p;
p = p->next;
j++;
}
q->next = p->next;
free(p);
len--;
cout << "delete OK\n";
}
}
//获取第i个元素
void get_list(node*& n, int i) {
node* p = n;
int j = 0;
if (len == 0 || i > len)
{
printf("get fail\n");
}
else {
while (j < i)
{
p = p->next;
j++;
}
cout << p->data << "\n";
}
}
//插入node
void insert_list(node*& n, int i, int e) {
node* p = n, *s;
int j = 0;
if (i - 1 > len)
{
printf("insert fail\n");
}
else {
while (j < i - 1)
{
p = p->next;
j++;
}
s = (node*)malloc(sizeof(node));
s->data = e;
s->next = p->next;
p->next = s;
len++;
cout << "insert OK\n";
}
}
int main() {
int count, i, e;
node* n = (node*)malloc(sizeof(node));
n->next = NULL;
create_list(n);
char flag[7];
scanf("%d", &count);
scanf("%s", flag);
while (count--)
{
if (!strcmp(flag,"show"))
{
show_list(n);
}
else if (!strcmp(flag, "delete"))
{
scanf("%d", &i);
delete_list(n, i);
}
else if (!strcmp(flag, "insert"))
{
scanf("%d %d", &i, &e);
insert_list(n, i, e);
}
else if (!strcmp(flag, "get"))
{
scanf("%d", &i);
get_list(n, i);
}
scanf("%s", flag);
}
return 0;
}0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复