再次复习数据结构:c语言链表的简单操作
最近呢,又要面临多次的数据结构与算法方面的试题了,而我呢,大概也重新温习c语言的基本要点快一个月了,主要是针对指针这货的角度在研究c语言,感觉又学到了不少。
现在c指针感觉知道点了,也就匆忙开展数据结构部分了。
首先,是比较简单的链表部分,其实说起来,说链表简单,那也是理解了之后才简单,记得刚开始不理解之前,感觉链表就是神。
链表:
创建链表,一般步骤是申明一个结构体,结构体里面再定义一个指向结构体自己的指针,通过这个指针将一块一块的内存区穿起来。
如:
struct node *next;
一块块的内存呢,自然是:malloc(sizeof(node))
几个核心的语句: s=(node *)malloc(sizeof(node));
p->next=s;
p=s;
穿到最后,结束时用 p->next=NULL;
求链表长度,不用说,从头遍历到尾,定义个变量n计数即可。
删除节点:这篇文章是单链表,删除的要义就是:
删节的前一个 要删除的节点 删节的后一个
pre p after
删之前他们的关系是:
pre->next=p;
p->next=after;
显然,删除要做的步骤就是:
pre->next=after 或 pre-next=p->next
释放这块内存 free(p);
直接运行代码:
#include<stdio.h>
#include<malloc.h>
typedef struct student
{
int data;
struct student *next;
}node; node *create()//创建链表,返回头指针
{
node *p,*head,*s;
head=(node *)malloc(sizeof(node));
int x,cycle=; p=head;
while(cycle)
{
scanf("%d",&x);
if(x)
{
s=(node *)malloc(sizeof(node));
s->data=x;
p->next=s;
p=s;
}
else
cycle=;
}
head=head->next;
p->next=NULL;
return head;
}
int length(node *head)//链表长度
{
node *p;
int n=;
p=head;
while(p)
{
n++;
p=p->next;
}
return n;
}
void print(node *head)//打印该链表
{
node *p;
p=head;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
}
node *del(node *head,int num)
{
node *p1,*p2;
p1=head;
while(num!=p1->data&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->data)
{
if(p1==head)
{
head=p1->next;
free(p1);
}
else
p2->next=p1->next;
}
else
printf("Not have this number\n");
return head;
}
int main()
{
node *head;
head=create();
printf("the List's length is %d\n",length(head));
print(head); del(head,);
printf("\nthe List's length is %d\n",length(head));
print(head); return ;
}
截图:
再次复习数据结构:c语言链表的简单操作的更多相关文章
- C语言----------链表的简单操作
#include <stdio.h> #include <malloc.h> typedef struct node{ //定义节点类型 char data; //数据域 st ...
- 【数据结构与算法】(二) c 语言链表的简单操作
// // main.c // testLink // // Created by lan on 16/3/6. // Copyright © 2016年 lan. All rights reserv ...
- [数据结构]C语言链表实现
我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们 ...
- C语言----------链表的简单实现与操作
链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成. 每个结点包括两个部 ...
- 数据结构C语言实现----出队伍操作
1.创建一个队列时,空队列中队首和队尾相同,但不是NULL,队首后面挂的元素才是NULL 2.打印队列时,对于链队列,不能把指针加一来找到下一个数据,因为链表地址不连续,需要复制一条链表,不断往后遍历 ...
- 数据结构C语言实现----出栈操作
代码如下: #include<stdio.h> #include<stdlib.h> typedef struct { char *base; char *top; int s ...
- 数据结构(一) 单链表的实现-JAVA
数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...
- 深入浅出数据结构C语言版(5)——链表的操作
上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
- 数据结构入门之链表(C语言实现)
这篇文章主要是根据<数据结构与算法分析--C语言描述>一书的链表章节内容所写,该书作者给出了链表ADT的一些方法,但是并没有给出所有方法的实现.在学习的过程中将练习的代码记录在文章中,并添 ...
随机推荐
- curl向web服务器发送json数据
c++使用libcurl: /* *g++ demo.cpp -g -Wall -lcurl */ #include <string.h> #include <stdlib.h> ...
- asp.net 连接access数据库方法
在 Web.Config 中配置 Access 数据库驱动和数据库文件名称. 请看代码 <appSettings> <add key="DBDriver" val ...
- iOS 用UISearchDisplayController实现查找功能
UISearchDisplayController是iOS中用于处理搜索功能的控制器,此控制器需要和UISearchBar结合使用 示例代码如下: // // WKRootViewController ...
- Dos关闭进程命令
netstat -ao 查找占用端口的进程 taskkikk /pid 端口pid /f
- 我用过的linux命令--安装Hadoop
1. hadoop软件传送给虚拟机 还是利用WinSCP把hadoop软件安装包,放到linux的Downloads文件夹中. 2. 选择安装目录 把hadoop安装包copy到这个安装目录中,这里我 ...
- widget intent重复问题
今天在做android widget时发现点击任意widget时只会更新最后一个widget 原来是requestCode的问题 Intent intent = new Intent(WidgetPr ...
- android开发环境安装记录
首先进入http://developer.android.com/sdk/index.html, Google提供了一个新的DeveloperTools,即:ADT Bundle,中文翻译之:ADT捆 ...
- android-意图Intent
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递 Intent 来 ...
- 导出Ext.grid.Panel到excel
1.客户端定义,基本的想法是form提交表格头定义,数据,以json方式传输 Ext.grid.Panel.addMembers({ exportExcel:function(options){ if ...
- Windows Azure 即将更名
今天我们宣布自2014 年4 月3 日起,WindowsAzure 将更名为Microsoft Azure.这一更名反映了Microsoft 的战略,并显示了Microsoft 专注于将Azur ...