简单链表-C语言复习

实现一个基本的链表,包括在链表后添加数据节点和输出链表i所有数据的功能

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3
 4 typedef struct node
 5 {
 6     int data;
 7     struct node *link;
 8 }NODE;
 9
10 //定义头指针
11 NODE *head;
12
13 void add(int data)
14 {
15
16     NODE *p;
17     p=(NODE *)malloc(sizeof(NODE));
18     p->data=data;
19
20     if(head==NULL)
21     {
22         head=p;
23         return ;
24     }
25
26     //注意,此时要保证链表尾head->link永远在最后
27     p->link=head->link;
28     head->link=p;
29 }
30
31 void display(NODE *node)
32 {
33     int i=1;
34     if(node)
35     {
36         while(node)
37         {
38             printf("%d -> %d\n",i,node->data);
39             node=node->link;
40             ++i;
41         }
42     }
43     else
44     {
45         printf("this list had no data!\n");
46     }
47 }
48
49 int main(void)
50 {
51     add(1);
52     add(2);
53     display(head);
54     return 0;
55 }

实现向链表固定位置插入数据和删除数据的功能

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3
  4 typedef struct node
  5 {
  6     int data;
  7     struct node *link;
  8 }NODE;
  9
 10 //定义头指针
 11 NODE *head;
 12
 13 void add_node(int data)
 14 {
 15
 16     NODE *p;
 17     p=(NODE *)malloc(sizeof(NODE));
 18     p->data=data;
 19
 20     if(head==NULL)
 21     {
 22         head=p;
 23         return ;
 24     }
 25
 26     //注意,此时要保证链表尾head->link永远在最后
 27     p->link=head->link;
 28     head->link=p;
 29 }
 30
 31 //删除第i个节点
 32 void delete_node(int i)
 33 {
 34     NODE *p;
 35     NODE *q;
 36     int n;
 37     if(!head)
 38     {
 39         return ;
 40     }
 41     if(i == 1)
 42     {
 43         p=head;
 44         head=head->link;
 45         free(p);
 46         return ;
 47     }
 48     for(n=1,q=head;n<i-1 && q->link!=NULL; ++n)
 49     {
 50         q=q->link;
 51     }
 52     p=q->link;
 53     q->link=p->link;
 54     free(p);
 55 }
 56
 57 //插入节点
 58 void insert_node(int i,int data)
 59 {
 60     NODE *p;
 61     NODE *q;
 62     int n;
 63
 64     p=(NODE *)malloc(sizeof(NODE));
 65     p->data=data;
 66
 67     if(i == 1)
 68     {
 69         p->link=head;
 70         head=p;
 71         return ;
 72     }
 73     for(n=1,q=head;n<i-1 && q!=NULL;++n)
 74     {
 75         q=q->link;
 76     }
 77     p->link=q->link;
 78     q->link=p;
 79 }
 80
 81 void display(NODE *node)
 82 {
 83     int i=1;
 84     if(node)
 85     {
 86         while(node)
 87         {
 88             printf("%d -> %d\n",i,node->data);
 89             node=node->link;
 90             ++i;
 91         }
 92     }
 93     else
 94     {
 95         printf("this list had no data!\n");
 96     }
 97 }
 98
 99 int main(void)
100 {
101     add_node(1);
102     add_node(2);
103     display(head);
104     printf("\n");
105     insert_node(1,3);
106     display(head);
107     return 0;
108 }
时间: 2024-08-24 04:47:17

简单链表-C语言复习的相关文章

C语言复习(一)关键字

最近在学COCOS2Dx,刚刚开始写一个塔防游戏,因为第一次用VS2012,感觉还不太习惯. C语言的大部分内容也忘记了,因此做一个简要的复习. 1.关键字: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigne

cpp学习(二)C语言复习

接下来复习一下C语言部分,毕竟C++与C语言本自同根生,并且在汇编层面C与C++可以说完全相同.假如你没有C语言基础的话,可以先暂停去学习一下C语言,C语言可以看"C语言之父"谭浩强的<C语言程序设计>或者观看学堂在线的免费公开课,在此推荐清华大学的c++课程:http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/courseware/a0f3bf5a4c044dfaaad68148

C语言复习3/6日

1.变量:变量代表一个有名字的.具有特定属性的一个存储单元.它用来存放数据,也就是存放变量的值.在程序运行期间,变量的值是可以改变的.变量必须先定义后使用.变量名和变量值是两个不同的概念.变量名实际上是以一个名字代表的一个存储地址.在对程序编译连接时由编译系统给每一个变量名分配对应的存储地址.从变量中取值,实际上是通过变量名找到对应的内存地址,从该存储单元中读取数据. 2.符号常量:用#define指令,指定用一个符号名称代表一个常量.如#define  PI  3.14 注意:符号常量不是变量

c语言复习 —— 数组

数组的产生:数据是一种存放数据的容器.所以:一个数组中里面的元素是同一种类型的. 一维数组: 1.定义: 类型 名称 [元素数量] 注意:元素数量必须是整数,c语言中没有对象这个概念,所以存放的都是基本的数据类型,而在oc中的数组中存放的是必须是对象. 在c99之前,元素数量必须子编译的时候定义下来,而c99之后,确实可以没有没有定义下来. eg: int[10];//表示定了10个元素的数组,为整数类型. 2.特点: 1)所有的元素都是具有相同的类型. 2)一旦创建,就不能够更改. 3)数组中

C语言复习3/9

1.C语言中定义数组的形式为:类型符  数组名[常量表达式],常量表达式中可以包括常量和符号常量,如"int a[3+5];"是合法的.不能包含变量,如"int a[n];"是不合法的.也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值.如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式.如: void func(int n) { int a[2 * n]; //合法,n的值从实参传来 . . . }

C语言复习

函数里面不能嵌套函数  这两个的区别是什么呢 #define a int[10] 属于宏定义,在编译的时候只进行替换,而不进行类型检查:typedef int a[10]: 只不过给int型取个别名,在编译的时候会进行类型检查. typedef 类型 别名;                  类型别名    用这个 #define 名字 替换成的字符          宏定义   只是把一个你写的东西替换成另一种东西,比如#define Hello "hello",把Hello替换成&

C语言复习——指针 链表 与 文件操作

刚刚进入大二,准备开始学习C++,对大一所学的C语言一次练习,正好也是赶上老师布置的任务,用C语言写一个  销售管理系统  ,就尽可能的把所学的都用上,也就是结构,指针,文件操作,还有数据结构,本次加入了链表. 用两个函数 Load_LinkList() 和 Save_LinkList() 让链表与文件操作结合,除了打印函数,其他都是在内存中操作链表,这样写更有条理,在创建链表时没有采用书上的用一个中间变量引导,并插入到结点前面,而是直接在链表尾的next申请内存,便于理解,操作也方便. /*首

C语言复习&mdash;&mdash;用到的小知识

1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: 注意:sizeof 它并不是一个函数,而是一个单目操作符, 2. C语言中常见的数据类型: 整型分为有符号整型(signed)和无符号整型(unsigned ), 它们各自又可以分为 长整型(long), 短整型(short), 整型(int)和字符型(char), 所以结合起来一共有8种基本的整型结构: long/short/int/

C语言 &#183; 复习杂记

/*=================================*/ /* 基础部分 */ /*=================================*/一:.CPP--C++文件:.C--C文件 二:C语言中浮点型一般分为float单精度型.double双精度型.long double长精度型,单精度浮点型小数点后面有效数字为6~7位和双精度浮点型小数点后面有效数字为15~16位 三:char s[N]--for(int i=0;s[i];i++):可以用s[i]进行循环.