文档章节

C语言单链表的创建,插入,删除,逆致

胡若晨
 胡若晨
发布于 2016/03/29 21:26
字数 588
阅读 32
收藏 0

` /************************************************************************* > File Name: link.c > Author: 胡若晨 > Mail: ----------------------------- > Created Time: 2016年03月29日 星期二 14时01分11秒 ************************************************************************/ #include<stdio.h> #include<stdlib.h>

struct Node { int data; struct Node *next; };

struct Node *create() //创建链表 { struct Node *p,*q,*head; //q是前驱指针 char interrupt[10]; //终端符

p = q = head = (struct Node *) malloc (sizeof(struct Node));

printf("please input data:");
scanf("%d",&p->data);

// printf("interrupt? yes($),no(any key) : "); // scanf("%s",interrupt); // while(p->data != interrupt[0]){ while(p->data != 0){ q = p; p = (struct Node *) malloc (sizeof(struct Node));

    printf("please input data:");
    scanf("%d",&p->data);

// printf("interrupt? yes($),no(any key) : "); // scanf("%s",interrupt);

    q->next = p; //连接链表
}

p->next = NULL;

return head;

}

void print(struct Node *head) { while(head != NULL){ printf("%4d",head->data); head = head->next; } printf("\n");

}

struct Node *delete(struct Node *head) { struct Node *p,*q;//q是前驱指针 p = q = head; int del,d; printf("\nplease input the del:"); scanf("%d",&del);

q = p = head;

while(p){
    d = del;
    if( p->data != d){
        q = p;
        p = p->next;
    }
    else 
        break;
    if(!p){
        printf("can't find\n");
    }
}
if(p == head){
    head = head->next;
}
else{
    q->next = p->next;
}

return head;
free(p);

}

struct Node *insert(struct Node *head) { struct Node *p,*ins; int e,inst;

printf("\nplease input the address(after) you want to insert:");
scanf("%d",&inst);
printf("\nplease input the element you want to insert:");
scanf("%d",&e);

p = (struct Node *) malloc (sizeof(struct Node));

p->data = e;

while(ins->data != inst){
    ins = ins->next;
}
if(ins->next == NULL){
    printf("can't find\n");
}
else{
    p->next = ins->next;
    ins->next = p;
}
if(head == NULL){
    head = p;
    p->next = NULL;
}

// else{ //insert after head // p->next = head->next; // head->next = p; // } // else{//insert before head // p->next = head; // head = p; // }

return head;

} struct Node *reverse(struct Node *head) { struct Node *p,*r;

if(head->next != NULL){
    p = head;
    r = p->next;
    p->next = NULL;//link tail == NULL
    printf("p->data = %d\n",p->data);

    while(r){
        p = r;
        r = r->next;
        p->next = head;
        head = p;
    }
}
printf("\nreverse success\n");
printf("The result is as following\n");

return head;

}

int main(void) { struct Node *head;

head = create();
print(head);

/下面这个地方一定要写成head = delete(head);以刷新head,博主就是在这里打成了delete(head);结果无法删除头节点,找了很久的bug,找到之后。。。。。。。/ head = delete(head); print(head); head = insert(head); print(head); head = reverse(head); print(head);

return 0;

} `

© 著作权归作者所有

胡若晨
粉丝 3
博文 14
码字总数 7894
作品 0
包头
私信 提问
单双链表练习题

本文是关于链表的一些操作(包括单链表和双向循环链表) 1、单链表,双链表的创建。 2、单链表和双链表的打印。 3、单链表的插入,删除。 4、双链表的插入和删除。 5、单链表的逆置。 6、单链...

qq_38646470
2018/01/27
0
0
基本数据结构 -- 链表的遍历、查找、插入和删除单

  本文将使用 C 语言来实现一个单链表,并实现遍历、查找、插入、删除等操作。 一、创建一个单链表   首先,定义一个存放结点相关信息的结构体,结构体有两个元素,分别是键值和一个指向...

tongye
04/23
0
0
链表面试题(上)

一、题目 1、从尾到头打印单链表 (有四种方法) 2、删除一个无头单链表的非尾节点(不能遍历链表) 3、在无头单链表的一个节点前插入一个节点(不能遍历链表) 4、单链表实现约瑟夫环(Joseph...

qq_38646470
2018/01/04
0
0
数据结构与算法-C语言篇7-链式存储结构之静态链表

数据结构与算法-目录 前言    C语言具有指针能力,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加方便灵活。 后来的面向对象语言,如Java、C#等,虽不使用指针,但因为...

香沙小熊
2018/01/09
0
0
经典链表练习题(1)

问题: 从尾到头打印单链表 删除一个无头单链表的非尾节点(不能遍历链表) 在无头单链表的一个节点前插入一个节点(不能遍历链表) 单链表实现约瑟夫环(JosephCircle) 逆置/反转单链表 单链...

triorwy
2018/01/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部