动态链表相关

/* 链表 */
#include<stdio.h>
#include<stdlib.h>
int main()
{
    //分配内存
    int * p = (int*)malloc(sizeof(int));
    free(p);
    int * p = new int;
    delete(p);
    return 0;
};

struct node {//链表结点
    int data;
    node* next;
};

node* create(int a[], int l)//创造链表(数据数组, 数组长度)
{
    node *p, *pre, *head;
    head = new node;//新建头结点
    head->next = NULL;
    pre = head;//记录pre为head
    for(int i=0;i<l;i++)
    {
        p = new node;//新建结点
        p->data = a[i];
        p->next = NULL;
        pre->next = p;//前驱结点指向新建结点
        pre = p;//移动,作为下个结点的前驱结点
    }
    return head;//返回头结点指针
};
node* createlink(int n)//创造一个长度为n的链表
{
    node *head, *p, *pre;
    head = new node;
    head->next = NULL;
    pre = head;
    while(n--)
    {
        int data;
        scanf("%d", &data);
        p = new node;
        p->data = data;
        p->next = NULL;
        pre->next = p;
        pre = p;
    }
    return head;
}

int search(node* head, int x)//查找函数(头指针,要查找的数) ,返回要查找数的个数
{
    int count = 0;
    node *p = head->next; //要判断数据域时, 必须指向头指针的下一位(即第一个结点)
    while(p != NULL)
    {
        if(p->data == x)
            count++;
        p = p->next;
    }
    return count;
};

void insert( node * head, int pos, int x)//在一个位置插入数(头指针, 插入位置, 插入数)
{
    node *p = head;//记录p为head
    for(int i=0;i<pos-1;i++) //位置下标-1
        p = p->next;//i=0到首节点
        //p到插入位置的前一个结点

    node *q = new node;//新建结点
    q->data = x;
    q->next = p->next;//p q指向同一块区域
    p->next = q;//p又指向新建结点q
};

void del( node * head, int x)//删除链表中所有为x的结点(头指针, 数)
{
    node *p = head->next;
    node *pre = head;//pre始终保持p的前驱结点的指针
    while (p != NULL)//判断数据域
    {
        if(p->data == x)//找到数据域,删除该结点
        {
            pre->next = p->next;
            delete(p);
            p = pre->next;//p继续移到下一位
        }
        else//没有找到数据域,pre和p都后移一位
        {
            pre = p;
            p = p->next;
        }
    }
};
void mergelink(node*a, node*b)//合并两个链表
{
    node * tail = a;
    while(tail->next != NULL)
    {
        tail=tail->next;
    }
    tail->next = b->next;

    node* i = NULL;//有排序要求
    node* j = NULL;
    node t;
    for(i = g1->next;i != NULL;i=i->next)//选择排序法
        for(j=i->next;j != NULL;j=j->next)
        {
            if(i->id > j->id)
            {
                t.id = i->id;
                t.score = i->score;

                i->id = j->id;
                i->score = j->score;

                j->id = t.id;
                j->score = t.score;
            }
        }
}void printlink(node* c)//打印链表
{
    c=c->next;
    while(c != NULL)
    {
        printf("%d", c->data);
        c=c->next;
    }
}void reprint(node * c)//打印反转链表(直接就是头结点)
{
    while ( c != NULL)
    {
        printf("%d ", c->data);
        c = c->next;
    }
    printf("\n");
};

node* reverse(struct node* head) //翻转链表
{
    if( head == NULL || head->next == NULL)
        return head;
    node *p = NULL;
    node *cur = head->next;
 
    while( cur != NULL )
    {
        node *t = cur->next;
        cur->next = p;
        p = cur;
        cur = t;
    }
    return p;
} 
int main()
{
    int a[6] = {1, 2, 4, 4, 5 ,6};
    node * j = create(a, 6);//传过来头指针
    insert(j, 4, 3);
    printf("%d\n", search(j, 4));
    j = j->next;
    while (j != NULL)
    {
       printf("%d ", j->data);
       j = j->next;
    }
    printf("\n");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值