原题链接:数据结构-链表的基本操作
解题思路:
注意事项:
参考代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node {
// int sno;
int sc;
struct Node* next;
}node, * LinkList;
LinkList L;
void CreateFromHead(int flag) {
node* s;
int c;
//struct Node L;
L = (node*)malloc(sizeof(node)); //建立头结点
L->next = NULL; //建立空的单链表L
//int n;
int f=0;
while (f<flag) {
// scanf("%d", &n);
scanf("%d",&c);
f++;
//if (c != 0) {
s = (node*)malloc(sizeof(node));//建立新结struct Node *点
s->sc = c;
// s->sno=n;
s->next = L->next; //将s结点插入表头
L->next = s;
// }
}
}
void InsList(LinkList L, int i, int e) {
/*在带头结点的单链表L中第i个位置插入值为e的新结点*/
node* pre, * s;
pre = L;
int k = 0;
while (pre != NULL && k < i - 1) { //查找第i-1个结点
pre = pre->next;
k++;
}
if (pre == NULL) {
printf("insert fail\n");
}
s = (node*)malloc(sizeof(node)); //申请一个新结点
s->sc = e;
s->next = pre->next; //修改指针完成插入操作
pre->next = s;
printf("insert OK\n");
}
void DelList(LinkList L, int i) {
/*在带头结点的单链表L中删除第i个元素*/
node* pre, * r;
pre = L;
int k = 0;
while (pre->next != NULL && k < i - 1) {//查找第i-1个结点
pre = pre->next;
k++;
}
/// if (pre->next == NULL) {
// printf("delete fail\n");
//return ERROR;
// }
r = pre->next;
pre->next = r->next;
//修改指针,删除结点r
int e=0;
e=r->sc;
free(r);
printf("delete OK\n");
// o--;
//return o;
//return OK;
}
void get(LinkList L, int a )
{
node* p = L;
for ( int i = 0; i < a; i++ )
p = p->next;
printf( "%d\n", p->sc);
}
void OutputList(LinkList L) {
node* p;
p = L->next;
if (p == NULL) {
printf("Link list is empty\n");
//return
}
else {
// node* p;
// p = L->next;
while (p!=NULL) {
printf("%d ",p->sc);
p = p->next;
}
printf("\n");
}
}
int main()
{
int n;
scanf("%d",&n);
CreateFromHead(n);
// OutputList(L);
// InsList(L,2,8);
// OutputList(L);
// DelList(L,3);
// OutputList(L);
// get(L,2);
int y;
int o;
o=n;
scanf("%d",&y);
char z[7];
for(int i=0;i<y;i++){
scanf("%s",z);
//printf("%s",z);
if(strcmp(z,"show")==0){
OutputList(L);
}
if(strcmp(z,"delete")==0){
int a;
scanf("%d",&a);
if ( a > o || a < 1 )
printf( "delete fail\n" );
else
{
DelList(L,a);
o--;
}
}
if(strcmp(z,"get")==0){
int a;
scanf("%d",&a);
get(L,a);
}
if(strcmp(z,"insert")==0){
int a,b;
scanf("%d",&a);
scanf("%d",&b);
if ( a>1&&L->next==NULL)
printf("insert fail\n");
else{ InsList(L,a,b);
o++;}
}
//InsList(L,a,b,o);
}
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复