链表,折磨人的数据结构

原创 2016年03月22日 22:28:30

链表,折磨人的数据结构

       要有一周的时间没更博了,这段时间我暂停了计蒜课的刷题,是因为我把《征服c指针》看完了。当然这本肯定不会只读一遍,我感觉按我目前的知识水平,应该之吸收了20%不到。所以我准备在学一点数据结构再去看一遍。

           学校开设的数据结构课开始疯狂的折磨人了。我每次翻开学校的教材,看着上面乱糟糟的排版,真的有一种想撕碎它的冲动。今天特别不在状态,在上完上机课后我就感觉特别累,莫名其妙的累。当然可能是上午上了两节高数后又上了三节数据结构的原因。今天上机给的实验题目就是链表的建立插入与删除,今天写的代码是我写过的链表代码最成功的一次,一次性编译通过,没有任何bug微笑,这个feel太爽!下面给出代码:

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
    int data;
    struct Node *next;
}Node;

void creatnode(Node *head)
{
    Node *temp,*p;
    p=head;
    int n;
    scanf("%d",&n);
    while(n!=-1)
    {
        temp=malloc(sizeof(Node));
        if(temp==NULL)
        {
            printf("No enough memory");
            exit(0);
        }
        temp->data=n;
        temp->next=NULL;
        p->next=temp;
        p=temp;
        scanf("%d",&n);
    }
}
void Print(Node *head)
{
    Node *p;
    p=head->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
void Insertnode(Node *head)
{
    printf("Now insert the data:");
    int e;
    scanf("%d",&e);
    Node *p,*pre,*temp;

    temp=malloc(sizeof(Node));
    temp->data=e;
    temp->next=NULL;

    pre=head;
    p=pre->next;//1 2 3 5
    while(p!=NULL)
    {
        if(e<=p->data)
        {
            pre->next=temp;
            temp->next=p;
            break;
        }
        pre=p;
        p=p->next;
    }
    if(p==NULL)
    {
        pre->next=temp;
    }

}
void Deletenode(Node *head)
{
    Node *p,*pre;
    pre=head;
    p=pre->next;
    printf("Now delete the data:");
    int n;
    scanf("%d",&n);
    while(p!=NULL)
    {
        if(p->data==n)
        {
            pre->next=p->next;
            free(p);
            break;
        }
        pre=p;
        p=p->next;
    }
    if(p==NULL)
        printf("No found\n");
}
void   FREE(Node *head)
{
    Node *pre=head;
    while(head!=NULL)
    {
        pre=head;
        head=head->next;
        free(pre);
    }
}

int main()
{
    Node *head;
    head=malloc(sizeof(Node));
    creatnode(head);
    printf("Before insert:");
    Print(head);
    Insertnode(head);
    printf("After insert:");
    Print(head);
    Deletenode(head);
    printf("After delete:");
    Print(head);
    FREE(head);
    return 0;
}
        太累了,也许是因为写了太多遍就没有写注释。这是最简单的单向链表。今天数据结构课还介绍了,对就仅仅只是介绍了双向链表,循环链表,静态链表。看着这些伪代码,我真的没有把他们翻译成c语言的冲动,哎!

        我也不知道为什么今天这么累,有可能是数据结构课上接触到的目前对我来说对我来说高难度数据结构让我感觉亚历山大,因为我一直自学在前面,一直以来上课教的东西对我来说是很轻松的,但数据结构教的东西让我很有压力,感觉心里失衡吧。

       总是说今天很累很累,但是今天也有高兴的事,我以绩点第一拿到了班级奖学金,和综测第六拿到了优秀学生奖学金二等奖。话说中学一直在名校读,从来都还没有拿到过奖学金呢。

       我感觉我还是太心急了,太迫切的想完全掌握c语言,导致我对出现的让我暂时不能明白的知识有点压力。以后要调整这种心态,不能太急功近利。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构-基本算法-单链表

  • 2017年05月21日 18:46
  • 5KB
  • 下载

c语言实现通用数据结构(一):通用链表

忽然想起来,大概在两年之前学习C语言的时候,曾经用C语言写过一些通用的数据结构。主要也就实现了链表、队列、椎、HashSet,还有HashMap。当时只是知道标准的C语言中没有这方面的类库,后来才知道...
  • swwlqw
  • swwlqw
  • 2014年03月29日 16:21
  • 3333

数据结构 非循环链表源码

  • 2015年05月19日 11:22
  • 537KB
  • 下载

数据结构链表

  • 2014年12月15日 16:28
  • 2KB
  • 下载

数据结构_树_二叉树的建立、遍历、复制与移除_二叉链表存储_C++实现

"head.h" #include using namespace std; class BitNode { public: BitNode(); char ch; BitNod...

数据结构--链表的排序详解

1、前言 前面两篇博客,我已经把线性表的两种基本的表示形式,做了一个基本的介绍和一些对比。但是,我突然发现在链表这里我缺少一个很重要的内容,那就是对我们的链表进行排序,其实,在连接两个链表的时候,就...

双链表数据结构

  • 2015年04月25日 22:38
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表,折磨人的数据结构
举报原因:
原因补充:

(最多只允许输入30个字)