原题链接:数据结构-链表的基本操作
声明:此代码仍然可以改进,望诸位大佬积极修正!!!
解题思路:
定义结点:
typedef struct Link
{
struct Link *next;
int elem;
}link; //这里我定义了一个结点
定义函数:
link *initLink(int *c,int n);//初始化数据,对数据进行赋值
link *insertElem(link *p,int add,int elem);//插入 " insert "
link *delElem(link *p,int add);//删除 " delete "
link *display(link *p);//显示 " show "
注意事项:
参考代码:
#include <string.h> #include <stdio.h> #include <stdlib.h> typedef struct Link { int elem; struct Link *next; }link; link *initLink(int *c,int n); link *insertElem(link *p,int add,int elem); link *delElem(link *p,int add); link *display(link *p); link *initLink(int *c,int n)//初始化 { link *p=(link*)malloc(sizeof(link)); link *temp=p; for(int i=n-1;i>=0;i--) { link *a=(link*)malloc(sizeof(link)); a->elem=c[i]; a->next=NULL; temp->next=a; temp=temp->next; } return p; } link *insertElem(link *p,int add,int elem)//插入 { link *temp=p; int j=0; while(temp&&j<add-1) { temp=temp->next; ++j; } if(!temp||j>add-1) { printf("insert fail\n"); return p; } link *c=(link*)malloc(sizeof(link)); c->elem=elem; c->next=temp->next; temp->next=c; printf("insert OK\n"); return p; } link *delElem(link *p,int add)//删除 { link *temp=p; int j=0; while(temp->next&&j<add-1) { temp=temp->next; ++j; } if(!(temp->next)||j>add-1) { printf("delete fail\n"); return p; } link *del=temp->next; temp->next=del->next; free(del); printf("delete OK\n"); return p; } link *getElem(link *p,int add)//获取读数 { link *temp=p; int j=0; while(temp->next&&j<add) { temp=temp->next; ++j; } if(!(temp->next)||j>add) { printf("get fail\n"); return p; } printf("%d\n",temp->elem); return p; } link *display(link *p) { link *temp=p; if(!(temp->next)) { printf("Link list is empty\n"); return p; } while(temp->next) { temp=temp->next; printf("%d ",temp->elem); } printf("\n"); return p; } int main() { int n; int c[100]; scanf("%d",&n); char str[20]; char str1[]="get"; char str2[]="insert"; char str3[]="delete"; char str4[]="show"; int add=0; int m_1,m_2; for(int i=0;i<n;i++) { scanf("%d",&c[i]); } link *p=initLink(c,n);//初始化 int order_num;//命令_数量 scanf("%d",&order_num); for(int j=0;j<order_num;j++) { scanf("%s",&str); if(strcmp(str,str1)==0)//获取 "get" { scanf("%d",&m_1); p=getElem(p,m_1); }else if(strcmp(str,str2)==0)//插入 "insert" { scanf("%d %d",&add,&m_2); insertElem(p,add,m_2); }else if(strcmp(str,str3)==0)//删除 "delete" { scanf("%d",&add); delElem(p,add); }else if(strcmp(str,str4)==0)//显示 "show" { display(p); } } return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复