运用到的函数为:

动态内存分配函数malloc()              比如:char *name=(char *)malloc(20);  相当与c++的new关键字

动态内存释放函数free()                 比如:free(name); 相当于c++的delete关键字

计算数据空间的字节数sizeof()         比如:p1 = (struct A*)malloc(sizeof(struct A));

这个链表很多地方没有加判断,判断字符的输入造成的死循环等等,也就大致的学习一下C的动态建立与C++的区别而已。

#include <stdio.h>
#define LENG sizeof(struct A) struct A
{
int num;
char name[20];
struct A *next;
}; struct A *head = NULL; //头指针
struct A* lb(); //建立链表函数
void cha(struct A *head); //查询函数
struct A* charu(struct A* head); //插入函数
struct A* Delete(struct A*head,int x); //删除函数 int main()
{
int y;
int x = 0; while (1)
{
printf("(1)建立链表(2)查询链表(3)插入(4)删除(5)退出\n");
scanf_s("%d", &y);
switch (y)
{
case 1:head = lb();
break;
case 2:cha(head);
break;
case 3:head = charu(head);
break;
case 4:
if (head == NULL)
{
printf("您的链表为空\n");
break;
}
printf("请输入要删除的编号:");
scanf_s("%d", &x);
head = Delete(head,x);
break;
case 5:break;
default:
printf("输入错误请重新输入\n");
continue;
}
if (y == 5)break;
}
system("pause");
return 0;
} struct A* lb()
{
struct A *p1=NULL, *p2=NULL;
int a, b, c;
p1 = p2 = (struct A*)malloc(LENG);
head = p1;
printf("请输入编号:");
scanf_s("%d", &p1->num);
printf("请输入姓名:");
scanf_s("%s", p1->name, 20); while (1)
{
p1 = (struct A*)malloc(LENG);
printf("请输入编号0为结束:");
scanf_s("%d", &a);
if (a == 0)
{
free(p1);
p2->next = NULL;
break;
}
p1->num = a;
printf("请输入姓名:");
scanf_s("%s", p1->name, 20);
p2->next = p1;
p2 = p1;
}
return head;
} void cha(struct A *head)
{
while (1)
{
if (head == NULL)
{
printf("您的链表为空\n");
break;
} printf("%d\t%s\n", head->num, head->name);
if (head->next == NULL)
{
break;
}
head = head->next;
}
} struct A* charu(struct A* head)
{
struct A *p1, *p2, *p3;
p1 = (struct A*)malloc(sizeof(struct A));
p2 = head;
printf("请输入编号:");
scanf_s("%d", &p1->num);
printf("请输入姓名:");
scanf_s("%s", p1->name, 20); if (head->num > p1->num)
{
p1->next = head;
return p1;
}
p3 = head; while (1)
{
if (p1->num < head->num)
{
p1->next = head;
p3->next = p1;
break;
}
else
{
p3 = head;
if (head->next == NULL)
{
head->next = p1;
p1->next = NULL;
break;
}
head = head->next;
}
}
return p2;
} struct A* Delete(struct A*head,int x)
{
struct A *p1,*p2;
p1 = p2 = head;
if (head->num == x)
{
p1 = head;
head = head->next;
free(p1);
return head;
} while (1)
{
if (head->num == x)
{
p1->next = head->next;
break;
}
else
{
p1 = head;
head = head->next;
}
}
return p2;
}

  

C的动态链表建立的更多相关文章

  1. 使用C语言描述静态链表和动态链表

    静态链表和动态链表是线性表链式存储结构的两种不同的表示方式. 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 动态链表是相对于静态链 ...

  2. C语言习题 链表建立,插入,删除,输出

    Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 222  Solved: 92 [Subm ...

  3. YTU 2430: C语言习题 链表建立,插入,删除,输出

    2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 576  解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...

  4. vc++基础班[28]---动态数组及动态链表的讲解

    C++中也有相应的动态数组.动态链表.映射表的模板类,就是STL中的:vector.list.map 他们属于C++标准中的一部分,对于程序的移植性来说也是不错的,但是在MFC编程中使用 CArray ...

  5. HDU 2095 find your present (2) 动态链表

    解题报告:输入一个n,后面紧跟着输入n个数,输入的这n个数中,除了有一个数的个数为奇数外,其它的数的个数都是偶数个,现在要你找出这个个数为奇数的这个数. 看起来好像很简单的样子,不过,这题的重点不在这 ...

  6. C++ 数据结构模板 队列 栈 动态链表 模板 Queue Stack List

    C++数据结构模板,可以实现基本功能,用法和stl差不多,比如Q.pop();Q.push(a);Q.front();...... (由于动态链表用的不多,若有错误望各位大神不吝赐教:) 队列: cl ...

  7. 01--数据结构——动态链表(C++)

    数据结构——动态链表(C++)   定义一个节点: [cpp] view plain copy   print? #include <iostream> using namespace s ...

  8. 20140502 static_cast和dynamic_cast的类型检查 双链表建立,删除,打印

    1.static_cast和dynamic_cast的类型检查 static_cast的类型检查:只检查无关类之间的转换 CBaseY* pY1 = static_cast<CBaseY*> ...

  9. C++ -> 在使用动态链表和异质链表产生野指针的步骤

    C++ -> 在使用动态链表和异质链表产生野指针的步骤 使用异质链表产生野指针的情况,下面是修改书本的例子: ------------------------------------------ ...

随机推荐

  1. mysql创建数据库和用户

    create database sonar character set utf8 collate utf8_general_ci; flush privileges; grant all privil ...

  2. windchill系统安装大概步骤

    1.安装VMware Workstation虚拟机 2.win7的64位操作系统(为什么不用32位?因为32位的内存最大只能设置4G) 3.安装Oracle数据库(映射iso文件[上面栏的虚拟机-&g ...

  3. java 连接 redis集群时报错:Could not get a resource from the pool

    由于弄这个的时候浪费了太多的时间,所以才记录下这个错,给大伙参考下 检查了一下,配置啥的都没问题的,但在redis集群机器上就可以,错误如下: Exception in thread "ma ...

  4. Extjs 分页多选的实现

    Extjs 版本 6.X 单页面的多选,没有任何问题. 直接使用 Grid的配置项进行绑定即可获取: xtype: 'grid', bind: { selection: '{checkedRecord ...

  5. hiho#1080 更为复杂的买卖房屋姿势 线段树+区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

  6. SpringBoot学习(2)

    三.日志 1.日志框架 springboot:底层是spring框架,spring框架默认使用JCL; springboot选用SLF4j和logback; 2.SLF4j使用 1.如何在系统中使用S ...

  7. JavaScript Browser 对象 实例

    使用JavaScript来访问和控制浏览器对象实例. Window 对象 弹出一个警告框 弹出一个带折行的警告框 弹出一个确认框,并提醒访客点击的内容 弹出一个提示框 点击一个按钮时,打开一个新窗口 ...

  8. Python面向过程和面向对象基础

    总结一下: 面向过程编程:根据业务逻辑从上到下的写代码-----就是一个project写到底,重复利用性比较差 函数式:将某些特定功能代码封装到函数中------方便日后调用 面向对象:对函数进行分类 ...

  9. Java 9的JDK中值得期待的:不仅仅是模块化

    在多次延期后,Java 9将于9月21日以Java开发工具包9的形式出现,这是自2014年3月以来,Java标准版的第一次重大升级.官方列出了JDK 9的大约90个新特性,模块化是最主要的一个.将Ja ...

  10. FlexboxLayout——Android弹性布局

    FlexboxLayout是一个Android平台上与CSS的 Flexible box 弹性盒子布局模块 有相似功能的库.Flexbox 是CSS 的一种布局方案,可以简单.快捷的实现复杂布局. F ...