#include <stdio.h>
#include <stdlib.h>
//先定义链表里面的元素。
typedef struct node{
int data;
struct node *next;
}MyNode;
//定义整个链表。
typedef struct link{
MyNode *head;//把head指向的元素定为第一个元素。
}MyLink;
int isEmpty_to_MyLink(MyLink *myLink);//判断链表是否为空。
int push_to_MyLinkInHead(MyLink *myLink,int m);//向链表头添加元素值为m的元素。
int insert_to_MyLink(MyLink *myLink,MyNode *myNode,int m);//向链表的myNode后面添加一个元素值为m的值。
int remove_to_MyLinkByValue(MyLink *myLink,int m);//删除链表中值为m元素。
int length_to_MyLink(MyLink *myLink);//判断链表的长度。
int isExistLoop_MyLink(MyLink *myLink);//判断链表是否有环。
void printMyLink(MyLink *myLink);//输出链表。
int isEmpty_to_MyLink(MyLink *myLink){
if (myLink->head==NULL) {
return 1;
}
return 0;
}
int push_to_MyLinkInHead(MyLink *myLink,int m){
MyNode *tempNode=malloc(sizeof(MyNode));
tempNode->data=m;
tempNode->next=myLink->head;
myLink->head=tempNode;
free(tempNode);
return 1;
}
int insert_to_MyLink(MyLink *myLink,MyNode *myNode,int m){
MyNode *tempNode=malloc(sizeof(MyNode));
tempNode->data=m;
tempNode->next=myNode->next;
myNode->next=tempNode;
free(tempNode);
return 1;
}
int remove_to_MyLinkByValue(MyLink *myLink,int m){
if (isEmpty_to_MyLink(myLink)) {
return 0;
}
int flag=0;
while ((myLink->head)&&(myLink->head->next)) {
if (myLink->head->next->data==m) {
myLink->head=myLink->head->next;
flag++;
}
}
if ((myLink->head)&&(myLink->head->data==m)) {
myLink->head=myLink->head->next;
flag++;
}
if (flag>0) {
return 1;
}
return 0;
}
int length_to_MyLink(MyLink *myLink){
int myLength=0;
while (myLink->head) {
myLink->head=myLink->head->next;
myLength++;
}
return myLength;
}
int isExistLoop_MyLink(MyLink *myLink){
MyNode *tempNodeA=malloc(sizeof(MyNode));
MyNode *tempNodeB=malloc(sizeof(MyNode));
tempNodeA=myLink->head;
tempNodeB=myLink->head;
while ((tempNodeB) && (tempNodeB->next)) {
tempNodeA=tempNodeA->next;
tempNodeB=tempNodeB->next->next;
if (tempNodeA==tempNodeB) {
return 1;
}
}
free(tempNodeA);
free(tempNodeB);
return 0;
}
void printMyLink(MyLink *myLink){
if (isEmpty_to_MyLink(myLink)) {
printf("链表为空\n");
return;
}
MyNode *myNode = myLink->head;
while (myNode) {
printf("%d , ",myNode->data);
myNode=myNode->next;
}
}
int main(int argc, const char * argv[])
{
//创建自己的链表。
MyLink *myLink = malloc(sizeof(MyLink));
myLink->head = NULL;
//创建自己链表中的元素。
MyNode *myNode = malloc(sizeof(MyNode));
myNode->next=NULL;
myNode->data=0;
//判断链表是否为空。
if (isEmpty_to_MyLink(myLink)) {
printf("空链表\n");
}
else{
printf("不是空链表\n");
}
//求得链表的长度。
printf("链表的长度为 %d\n",length_to_MyLink(myLink));
//向链表中指定位置插入一个元素。
int temp = 10;
//插入到链表的头部。
if (push_to_MyLinkInHead(myLink, temp)) {
printf("添加成功\n");
}
else{
printf("添加失败\n");
}
//求得链表的长度。
printf("链表的长度为 %d\n",length_to_MyLink(myLink));
printMyLink(myLink);
//删除某个值
if (remove_to_MyLinkByValue(myLink, temp)) {
printf("删除成功\n");
}
else{
printf("删除失败\n");
}
//判断链表是否有环。
if (isExistLoop_MyLink(myLink)) {
printf("存在环\n");
}
else{
printf("不存在环\n");
}
printMyLink(myLink);
//求得链表的长度。
printf("链表的长度为 %d\n",length_to_MyLink(myLink));
free(myLink);
free(myNode);
return 0;
}
- 浏览: 1354589 次
- 性别:
- 来自: 开封
最新评论
-
用户6006038975:
macd2666 写道录制出来的语音声音好轻啊。你好,这个编译 ...
ios音频录制和播放,文件很小。压缩效果不错 -
用户6006038975:
macd2666 写道录制出来的语音声音好轻啊。
ios音频录制和播放,文件很小。压缩效果不错 -
用户6006038975:
linker command failed with exit ...
ios音频录制和播放,文件很小。压缩效果不错 -
mapboo:
http://www.codertopic.com/?page ...
史上最全的iOS面试题及答案 -
macd2666:
录制出来的语音声音好轻啊。
ios音频录制和播放,文件很小。压缩效果不错
相关推荐
c++实现链表增删改查
使用C++实现双向循环链表的增删改查排序等操作,可查看个人博客的【[数据结构和算法]C/C++双向循环链表实现(增删改查排序)】--链接https://blog.csdn.net/slimmm/article/details/84317806
Java实现单链表的增删改查以及选择、冒泡、反转排序等功能的实现!
用java实现链表增删改查
实现双向链表的增删改查功能,dos窗口输入输出,可运行,有注释
自己写的,能够使用,对c语言的指针用的淋漓精致,有需要的小伙伴可以下载看下
C语言版本的双链表,有增删改查功能,有注释,并且代码格式规范,容易理解
实现链表的各种功能,增加元素,删除元素,修改元素,查找特定元素。
有关单向链表的增删改查,对于单向链表的插入,在固定节点后面插入分为四种情况
创建一个循环链表,该链表可以实现增删改查等功能.....
C语言编写的单链表增删改查,实现了单链表的增加,删除,修改,查询等功能
双向链表(Doubly Linked List)是一种常见的数据结构,在单链表的基础上增加了向前遍历的功能。与单向链表不同,双向链表的每个节点除了包含指向下一个节点的指针外,还包含指向前一个节点的指针。
线性表和链表的存储和增删改查c++
分为图书,用户和操作(增删改查)三大块,适合新手练习和理解。图书部分用链表存储;图书操作部分用接口实现,包含添加,借出,删除,展示,退出,查找,返回等功能。
本库为C语言(Linux环境下编写的适用于所有C的数据结构库函数)。包括了最基础也是最常用的增删改查功能函数,队列,栈,链表(单链表,双链表,循环链表等都有),树的增删改查函数。程序可靠。
链表操作(增删改查)C语言实现 在VC++6.0中可编译运行通过!
链表操作,增删改查.txt
c++编写的学生管理系统,采用链表的结构和面向过程的方法,实现了对学生成绩的增删改查的基本功能,具有基本界面,使用者可根据序号选择自己想要实现的功能。