原题链接:数据结构-链表的基本操作
解题思路:
注意事项:
参考代码:
#include<stdio.h>
#include<string.h>
typedef struct _Node
{
int data;
struct _student *next;
}Node,*LinkList;
LinkList list_Init(int n)
{
LinkList L;
L=(Node *)malloc(sizeof(Node));
if(L==NULL)
{
printf("申请空间失败");
exit(0);
}
L->next=NULL;
//前插法
for(int i=0;i<n;i++)
{
Node*p;
p=(Node *)malloc(sizeof(Node));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
return L;
}
void get(LinkList L,int a)
{
Node* p=L;
for(int i=1;i<=a;i++)
{
if(p!=NULL)
{
p=p->next;
}
else
{
printf("get fail\n");
exit(0);
}
}
printf("%d\n",p->data);
}
void delete(LinkList L,int a)
{
Node* pre=L;
for(int i=1;i<a;i++)
{
if(pre!=NULL&&pre->next!=NULL)
{
pre=pre->next;
}
else
{
printf("delete fail\n");
return;
}
}
Node* cur=pre->next;
pre->next=cur->next;
free(cur);
printf("delete OK\n");
}
void insert_LinkList(LinkList L,int data,int addr)
{
Node* p=L;
for(int i=1;i<addr;i++)
{
if(p!=NULL&&p->next!=NULL)
p=p->next;
else
{
printf("insert fail\n");
return;
}
}
Node *n;
n=(Node *)malloc(sizeof(Node));
n->data=data;
n->next=p->next;
p->next=n;
printf("insert OK\n");
}
void show_LinkList(LinkList L)
{
if(L->next==NULL)
{
printf("Link list is empty\n");
}
else
{
Node *r=L->next;
while(r)
{
printf("%d ",r->data);
r=r->next;
}
printf("\n");
}
}
int main()
{
int n1;
scanf("%d",&n1);
LinkList L=list_Init(n1);
int n2;
scanf("%d",&n2);
char order[10];
for(int i=0;i<n2;i++)
{
scanf("%s",order);
if(!strcmp(order,"get"))//获取 "get"
{
int a;
scanf("%d",&a);
get(L,a);
}
else if(!strcmp(order,"insert"))//插入 "insert"
{
int addr,data;
scanf("%d%d",&addr,&data);
insert_LinkList(L,data,addr);
}
else if(!strcmp(order,"delete"))//删除 "delete"
{
int a;
scanf("%d",&a);
delete(L,a);
}
else if(!strcmp(order,"show"))//显示 "show"
{
show_LinkList(L);
}
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复