解题思路:
注意事项:
参考代码:
#include<iostream>
using namespace std;
//数字链表结点定义
typedef struct Num{
int number;
struct Num *next;
int length;
}num,*N;
//字符串链表结点定义
typedef struct Str{
string operation;
int place;
int elem;
struct Str *next;
}str,*S;
//定义操作函数
void show(num *object)
{
num *temp = object->next;
if(temp == NULL)
{
cout << "Link list is empty" << endl;
}
else
{
while(temp != NULL)
{
cout << temp->number << " ";
temp = temp->next;
}
cout << endl;
}
}//show函数
void del(str *check,num *object)
{
if(check->place < 1 || check->place > object->length)
{
cout << "delete fail" << endl;
}
else
{
num *pre = object;
num *temp = object->next;
for(int i =0;i < (check->place - 1);i++)
{
pre = temp;
temp = temp->next;
}
pre->next = temp->next;
delete temp;
--object->length;
cout << "delete OK" << endl;
}
}//delete函数
void insert(str *check,num *object)
{
if(check->place < 1 || check->place > object->length)
{
if(check->place == 1)
{
num *new_node = new num;
new_node->number = check->elem;
new_node->next = object->next;
object->next = new_node;
++object->length;
cout <<"insert OK" << endl;
return;
}
else
{cout << "insert fail" << endl;}
}
else
{
num *temp = object;
for(int i = 0;i < (check->place - 1);i++)
{
temp = temp->next;
}
num *new_node = new num;
new_node->number = check->elem;
new_node->next = temp->next;
temp->next = new_node;
++object->length;
cout << "insert OK" << endl;
}
}//insert函数
void get(str *check,num *object)
{
if(check->place < 1 || check->place > object->length)
{
cout << "get fail" << endl;
}
else
{
num *temp = object;
for(int i = 0; i < check->place;i++)
{
temp = temp->next;
}
cout << temp->number << endl;
}
}//get函数
int main()
{
//创建数字链表
int num_length = 0;
cin >> num_length;//第一个数字为链表长度
N num_head = new num;
num_head->next = NULL;
num_head->length = 0;//创建头结点
num *ntail = num_head;//创建为指针
for(int i = 0;i < num_length;i++)
{
num *p = new num;
cin >> p->number;
ntail->next = p;
ntail = p;
p->next = NULL;
++num_head->length;
}//结点输入
//创建操作字符串链表
int str_length;
cin >> str_length;
S str_head = new str;
str_head->next = NULL;
str *htail = str_head;
for(int i = 0;i < str_length;i++)
{
str *q = new str;
cin >> q->operation;
if(q->operation == "get" || q->operation == "delete")
{
cin >> q->place;
}
else if(q->operation == "insert")
{
cin >> q->place;
cin >> q->elem;
}
htail->next = q;
htail = q;
q->next = NULL;
}
//遍历字符串操作链表,调用对应函数
str *check = str_head->next;
for(int i = 0;i < str_length;i++)
{
if(check->operation == "show")
{
show(num_head);
}
else if(check->operation == "delete")
{
del(check,num_head);
}
else if(check->operation == "get")
{
get(check,num_head);
}
else if(check->operation == "insert")
{
insert(check,num_head);
}
check = check->next;
}
//释放链表内存
num *del_num = num_head->next;
while(del_num != NULL)
{
num *next_del_n = del_num->next;
delete del_num;
del_num = next_del_n;
}
delete num_head;
str *del_str = str_head->next;
while(del_str != NULL)
{
str *next_del_s = del_str->next;
delete del_str;
del_str = next_del_s;
}
delete str_head;
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复