链表的插入遍历查询-之玩转代码
来源:互联网 发布:iphone数据用不了 编辑:程序博客网 时间:2024/05/16 05:10
链表是一种算法,链表的基础就是指针。 指针就是地址,指针变量就是能存放地址的变量。所以指针变量可以被赋值,这也就造就了链表。链表的每一个结点,都用首地址来表示。当前结点的地址变量可以被赋值为下一个结点的地址,这样循环下去就形成了链表。同时,把某个结点的地址赋给指针变量,就可以通过这个指针变量来访问这个节点的内容了。 指针特点:
1 指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1 2 设p为指针变量,则p==0表明p是空指针,它不指向任何变量; 3 对指针变量赋0值和不赋值是不同的。指针变量未赋值时,可以是任意值,是不能使用的。否则将造成意外错误。而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。
1 #include <stdio.h>
2 #include <string.h>
3 #include <malloc.h>
4 #include <stdbool.h>
5
6 #define N 3
7 #define TARGET 22
8
9 typedef unsigned int uint;
10 typedef struct DATA{
11 uint data;
12 struct DATA *next;
13 }DATA;
14
15 static DATA *head, *p_current,*p_tail;
16
17 void creat(void);
18 void search(uint data);
19 void input(void);
20 /**************************************
*Description : 此函数实现初始化链表的首结点
**************************************/
21 void creat()
22 {
23 head =(DATA *)malloc(sizeof(DATA));
24
25 if(head!=NULL)
26 {
27 head->data=20;
28 }
29 p_current=head;
30 }
31 /**************************************
*Description : 此函数实现增加链表的功能
**************************************/
32 void input(void)
33 {
34 uint data ,i;
35 for(i=0;i<N;i++)
36 {
37 scanf("%d",&data);
38
39 p_tail=(DATA *)malloc(sizeof(DATA));
40 if(p_tail!=NULL)
41 {
42 if(p_current->data>=data)
43 {
44 p_tail->data=p_current->data;
45 p_current->data=data;
46 p_current->next=p_tail; //move the point
/*47行是移动指针的作用,但是在一开始我没有写上此句,导致链表不能形成*/
47 p_current=p_current->next;
48 }
49 else
50 {
51 p_tail->data=data;
52 p_current->next=p_tail; //move the point
53 p_current=p_current->next;
54 }
56 }
57 }
58 p_current->next=NULL;
59 }
60 static int Index=0;
61 /*********************************************
*Description : 此函数实现查找链表结点,输出该节点的索引
**********************************************/
62 void search(uint data)
63 {
64 DATA *p;
65 p=head;
/*66行,我用过p->next!=NULL
导致链表丢失一个结点*/
66 while(p!=NULL)
67 {
68 if(data==p->data)
69 break;
70 p=p->next; //移动指针到下一个结点
71 Index++;
72 }
73 }
74
75 void print(void)
76 {
77 DATA *p;
78 p=head;
79 printf("---the link value is ");
80 while(p!=NULL)
81 {
82 printf(" %d",p->data);
83 p=p->next;
84 }
85 printf("/n");
86 }
87
89 int main()
90 {
91 creat();
92 input();
93 print();
94 search(TARGET);
95 if(Index<=N)
96 printf("---the value Index is %d----/n",++Index);
97 else
98 printf("---the value is not exist---/n");
99
100 return 0;
101 }
- 链表的插入遍历查询-之玩转代码
- 实现线性表的遍历查询插入删除合并
- 数据结构学习二 数据结构之链表代码版【创建,遍历,删除,插入】
- 冒泡算法-之玩转代码
- 双向链表的插入、删除、遍历
- Java 实现链表的插入,遍历
- 代码优化之基于双向链表插入的实现
- 顺序表的创建,插入,修改,删除,查询代码
- 素数算法--之玩转代码
- C++实现二叉树的插入、删除、查询、遍历
- 链表的创建、查询、插入、删除
- 链表的创建、查询、删除,插入;
- 链表的创建、查询、删除,插入;
- 两表联合查询插入代码:
- 玩转github之上传代码
- 玩转gitHub之本地代码上传
- 玩转gitHub之上传代码
- 玩转gitHub之更新代码
- const_iterator的使用,STL算法----copy(),输出迭代器---ostream_iterator()
- web.config中的session配置详解
- 都快三十的人了什么也没有
- 中医资源汇总
- Thinkpad笔记本验机2
- 链表的插入遍历查询-之玩转代码
- 理解NULL IN SQL
- SQL Server 函数大全
- Thinkpad笔记本电池保养
- WM_PAINT讯息
- JAVA排序算法测试类
- FTP文件上传
- 时序图的绘制—使用Gnuplot
- 李开复:算法的力量