原题链接:数据结构-链表的基本操作
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct Node{
int c;
struct Node* next;
}NODE, * node;
typedef struct{
node head;
int len;
}LIST, * list;
void createNode(list l){
if(l != NULL){
l->head= (node)malloc(sizeof(NODE));
if(l->head){
l->head->c = 0;
l->head->next = NULL;
node temp = NULL;
int state = 0;
for(int i = 0; i < l->len; i++){
temp = (node)malloc(sizeof(NODE));
if(temp){
state = scanf("%d", &(temp->c));
if(l->head->next){
temp->next = l->head->next;
l->head->next = temp;
} else{
temp->next = NULL;//少了这个.麻烦.
l->head->next = temp;
}
}
}
temp = NULL;
}
}
}
void show_data(LIST l){
node t = l.head->next;
node delete = NULL;
if(t == NULL){
puts("Link list is empty");
} else{
while(t){
printf("%d ", t->c);
t = t->next;
//delete = NULL;
}
puts("");
}
}
LIST delete_data(LIST l){
node t = l.head;//指向头节点.
int n = 0;
int status = scanf("%d", &n);
if(l.len < n|| n<1){
puts("delete fail");
} else{
for(int i = 1; i < n; i++){//n为1 删除第一个元素.记录删除的上一个指针.
t = t->next;
}
node temp = t->next;//头指针
t->next =temp->next;
free(temp);
temp = NULL;
l.len--;
puts("delete OK");
}
return l;
}
LIST insert_data(LIST l){
node t = l.head;//指向头节点.
int n = 0;
int place = 0;
int status = scanf("%d%d",&place, &n);
if(l.len+1 < place || place < 1){//5五个元素 插入第7 个就不对. 第6个可以.
puts("insert fail");
} else{
for(int i = 1; i <place; i++)
t = t->next;//t是上一个结点.
node temp = (node)malloc(sizeof(NODE));//头指针
temp->c = n;
temp->next = t->next;
t->next = temp;
l.len++;
puts("insert OK");
}
return l;
}
LIST get_data(LIST l){
node t = l.head;//指向头节点.
int n = 0;
int place = 0;
int status = scanf("%d", &place);
if(l.len < place || place < 1){//5五个元素 插入第7 个就不对. 第6个可以.
puts("get fail");
} else{
for(int i = 1; i <= place; i++){
t = t->next;//t当前结点.
}
printf("%d\n", t->c);
}
return l;
}
void free_point(node p){
if(p){
//释放指针.
node temp = NULL;
while(p){
temp = p;
p = p->next;
free(temp);
}
temp = NULL;
}
}
int main(){
int n;
int status = scanf("%d", &n);
LIST l;
l.head = NULL;
l.len = n;
createNode(&l);
char arr[10] = { 0 };
char* p[4] = { "show","delete","insert","get"};
//char arr1[4][10] = { "show","delete","insert","get"};
status= scanf("%d", &n);//此时n是循环次数
while(n-->0){
status = scanf("%s", arr);
int i = 0;
for(; i < 4; i++){
//printf("%s\n", *(p + i));
//printf("%s\n", arr1[i]);
if(strcmp(arr, *(p + i)) == 0) break;
}
switch(i){
case 0:
show_data(l);
break;
case 1:
l=delete_data(l);
break;
case 2:
l = insert_data(l);
break;
case 3:
l = get_data(l);
break;
default:
break;
}
}
//show_data(l);
free_point(l.head);
return 0;
} 0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复