博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表的简单操作
阅读量:7239 次
发布时间:2019-06-29

本文共 3489 字,大约阅读时间需要 11 分钟。

今天晚上又重新温故了链表的简单操作

 

1关于链表的定义在此不多赘述,该文件为link.h文件

#define ElemType chartypedef struct Node{    ElemType data;    struct Node * next;}Node, *LinkList;

初始化

#include 
#include "link.h"// initvoid InitList(LinkList *L){ *L = (LinkList)malloc(sizeof(Node)); (*L)->next = NULL;}int main(int argc, char const *argv[]){ Node *p = NULL; InitList(&p); return 0;}

在初始化时候,为什么形参是一个二级指针呢?

看主函数,我们明白p所指向的事一个头结点,头结点的下一个结点才是第一个元素结点,这也是为什么p为二级指针的原因

 

2接下来是链表的插入,输入若干个字符以‘$’为结束符

// 用头插法创建链表void CreatFromHead(LinkList L){    Node *s;    char c;    int flag = 1;    while(flag)    {        c = getchar();        if(c != '$')        {            s = (LinkList)malloc(sizeof(Node));            s->data = c;            s->next = L->next;            L->next = s;        }        else        {            flag = 0;        }    }}void CreatFromTail(Node *L){    Node *r, *s;    char c;    int flag = 1;    r = L;    while(flag)    {        c = getchar();        if(c != '$')        {            s = (LinkList)malloc(sizeof(Node));            s->data = c;            r->next = s;            r = s;        }        else        {            flag = 0;            r->next = NULL;        }    }}

输入1234,对应头插法的结果是4321,对应尾插法的结果是1234

 

3链表的打印

void print(Node *L){    Node *t, *p = L;    t = p->next;                //t是头结点    while(t != NULL)    {        printf("%c", t->data);        t = t->next;    }}

因为链表的第一个元素是第二个结点,因此我们定义了t变量

 

4查出第链表中第i个元素

Node* Get(Node *L, int i){    Node *p;    int j = 0;    if(i < 0)        return NULL;    p = L;        for(j = 0; j < i && p->next != NULL; j++)    {        p = p->next;    }    if(j == i)        return p;    else        return NULL;}

也比较简单,在遍历的时候考虑,有没有结束和是否到了i这个位置两个因素即可。

 

下面是所有的代码

1 #include 
2 #include "link.h" 3 4 // init 5 void InitList(LinkList *L) 6 { 7 *L = (LinkList)malloc(sizeof(Node)); 8 (*L)->next = NULL; 9 }10 11 // 用头插法创建链表12 13 void CreatFromHead(LinkList L)14 {15 Node *s;16 char c;17 int flag = 1;18 while(flag)19 {20 c = getchar();21 if(c != '$')22 {23 s = (LinkList)malloc(sizeof(Node));24 s->data = c;25 s->next = L->next;26 L->next = s;27 }28 else29 {30 flag = 0;31 }32 }33 }34 35 void CreatFromTail(Node *L)36 {37 Node *r, *s;38 char c;39 int flag = 1;40 r = L;41 while(flag)42 {43 c = getchar();44 if(c != '$')45 {46 s = (LinkList)malloc(sizeof(Node));47 s->data = c;48 r->next = s;49 r = s;50 }51 else52 {53 flag = 0;54 r->next = NULL;55 }56 }57 }58 59 60 void print(Node *L)61 {62 Node *t, *p = L;63 t = p->next; //t是头结点64 while(t != NULL)65 {66 printf("%c", t->data);67 t = t->next;68 }69 }70 71 Node* Get(Node *L, int i)72 {73 Node *p;74 int j = 0;75 if(i < 0)76 return NULL;77 p = L;78 79 for(j = 0; j < i && p->next != NULL; j++)80 {81 p = p->next;82 }83 if(j == i)84 return p;85 else86 return NULL;87 }88 89 int main(int argc, char const *argv[])90 {91 Node *p = NULL;92 InitList(&p);93 CreatFromTail(p);94 print(p);95 return 0;96 }

 

 

心得:

哈哈,再一次玩链表是靠自己一点点看书,自己一点点理解起来,说真的当时院长讲链表的时候自己一点也没搞清楚,但是自己花时间琢磨,慢慢的也就理解了

 

转载于:https://www.cnblogs.com/hello-lijj/p/6582166.html

你可能感兴趣的文章
大共享永久免费云服务器评测体验
查看>>
虚拟化基础架构Windows 2008篇之4-将Windows计算机加入到域
查看>>
about script engine on jdk 6 is mozilla rhino
查看>>
android之Apache Http初使用——向服务器发送请求
查看>>
nohup命令 使用方法详解
查看>>
Intent 和 Intent Filter
查看>>
Linux下MySQL的主从热备(自动同步)配置
查看>>
Windows 8 Consumer Preview版升级到 Release Preview 版后Metro应用(html5+JavaScript版)修改小结...
查看>>
编程珠玑:变位词程序的实现
查看>>
POJ 2987 Firing
查看>>
Newtonsoft.Json 应用
查看>>
HDU 1400 Mondriaan's Dream
查看>>
从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-5.Android中的进程与线程)...
查看>>
如何在修改控件属性值,而不触发事件
查看>>
汉语转拼音之pinyin4j(转载)
查看>>
GNU make manual 翻译(六十)
查看>>
EffectiveC++ Item25说的东东
查看>>
stl学习总结简略
查看>>
Struts2中 No result defined for action com.test.action.LoginAction and result success
查看>>
对PostgreSQL源代码中的 ObjectClass的初步理解
查看>>