原题链接:数据结构-链表的基本操作
解题思路:
注意事项:
参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//结构体定义
typedef struct node{
int data;
struct node *next;
}node,*List;
//判断是否申请成功
void isOk(List L){
if (L == NULL){
printf("申请失败");
exit(0);
}
}
//创建函数(尾插法),输出结果逆序
List LinkedListCreatT(int n,int *len){
//初始化头结点
node *L;
L = (node *)malloc(sizeof(node));
L->next = NULL;
isOk(L);
*len = n;
int x;
for (int i=0;i<n;i++){
scanf("%d",&x);
node *p;
p = (node *)malloc(sizeof(node));
isOk(p);
p->data = x;
p->next = L->next;
L->next = p;
// printf("%p ",p);
}
// printf("%p ",L);
return L;
}
//删除
List LinkedDelete(List L,int x,int *len){
if (x < 0 || x > *len){
printf("delete fail\n");
}else{
if (L->next == NULL){
printf("Link list is empty\n");
}else{
node *p,*pre;
if (x==1){
p = L->next;
L->next = p->next;
free(p);
printf("delete OK\n");
(*len)--;
return L;
}else{
p = L->next;
for (int temp = 1;temp<x;temp++){
pre = p;
p = p->next;
}
pre->next = p->next;
free(p);
printf("delete OK\n");
(*len)--;
return L;
}
}
}
return L;
}
//插入
void LinkedListInsert(List L,int x,int k,int *len){
if (x < 0 || x > *len+1){
printf("insert fail\n");
}else{
node *pre;
pre = L;
for (int temp=1;temp<x;temp++){
pre = pre->next;
}
node *p;
p = (node *)malloc(sizeof(node));
isOk(p);
p->data = k;
p->next = pre->next;
pre->next = p;
(*len)++;
printf("insert OK\n");
}
}
//获取第a个元素
void LinkedListGet(List L,int x){
if (L->next == NULL){
printf("Link list is empty\n");
}else{
node *p;
p = L;
for (int temp=1;temp<=x;temp++){
p = p->next;
}
printf("%d\n",p->data);
}
}
//显示链表
void show(List L){
if (L->next == NULL){
printf("Link list is empty\n");
}else{
node *p;
p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
}
//主函数
int main(){
List list;
int len;
int n;
scanf("%d",&n);
list = LinkedListCreatT(n,&len);
int m;
scanf("%d",&m);
for (int i=0;i<m;i++){
char order[7];
scanf("%s",&order);
if (strcmp(order,"show") == 0){
show(list);
}
else if (strcmp(order,"delete") == 0){
int k;
scanf("%d",&k);
list = LinkedDelete(list,k,&len);
}
else if (strcmp(order,"insert") == 0){
int y,u;
scanf("%d%d",&y,&u);
LinkedListInsert(list,y,u,&len);
}
else if (!strcmp(order,"get")){
int r;
scanf("%d",&r);
LinkedListGet(list,r);
}
}
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复