#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义链表类型
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkedList;
//初始化链表
LinkedList Listint(){
Node *L;
L = (Node*)malloc(sizeof(Node));//分配空间
if(L == NULL){
exit(1);
}
L->next = NULL;
return L;
}
//头插法
LinkedList LinkedListH(LinkedList L,int x){
Node *p;
for(int i = 0; i < x; i++){
p = (Node*)malloc(sizeof(Node));
scanf("%d",&p->data);
p->next = L->next;
L->next = p;
}
return L;
}
//尾插法
/*LinkedList LinkedListT(LinkedList L, int x){
Node *p,*r;
r = L;
for(int i = 0; i < x; i++){
p = (Node*)malloc(sizeof(Node));
scanf("%d", &p->data);
r->next = p;
r = p;
}
return L;
}*/
//遍历输出
void printlist(LinkedList L){
Node *p = L->next;
if(p == NULL){
printf("Link list is empty");
}
else {
while(p){
printf("%d ",p->data);
p = p->next;
}
}
}
//获得一个整数
int getA(LinkedList L, int x){
int y = 0;
if(L->next == NULL){
printf("get fail\n");
}
for(int i = 0; i <= x; i++){
y = L->data;
L = L->next;
}
return y;
}
//删除一个整数
LinkedList Listde(LinkedList L, int x){
Node *p,*pre;
p = (Node*)malloc(sizeof(Node));
p = L;
for(int i = 0; i < x && p != NULL; i++){
pre = p;
p = p->next;
}
if (p == NULL) {
printf("delete fail\n", x);
return L;
}
pre->next = p->next;
free(p);
printf("delete OK\n");
return L;
}
//插入一个整数
LinkedList Listin(LinkedList L,int x, int y){
Node *pre;
pre = L;
for(int i = 1; i < x && pre != NULL; i++){
pre = pre->next;
}
if (pre == NULL) {
printf("insert fail\n");
return L;
}
Node *p;
p = (Node*)malloc(sizeof(Node));
if(p == NULL){
printf("内存分配失败\n");
exit(1);
}
p->data = y;
p->next = pre->next;
pre->next = p;
printf("insert OK\n");
return L;
}
int main(){
int n;
scanf("%d",&n);
//printf("%d",n);
LinkedList list = Listint();
LinkedListH(list,n);
//printlist(list);
//printf("\n");
int m;
scanf("%d",&m);
//printf("%d",m);
int a,b;
char str[10];
for(int i = 0; i < m; i++){
scanf("%s",str);
if(strcmp(str,"show") == 0){
printlist(list);
printf("\n");
}
if(strcmp(str,"get") == 0){
scanf("%d",&a);
printf("%d\n",getA(list,a));
}
if(strcmp(str,"delete") == 0){
scanf("%d",&a);
Listde(list,a);
//printlist(list);
}
if(strcmp(str,"insert") == 0){
scanf("%d %d",&a,&b);
Listin(list,a,b);
}
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复