【第22期】观点:IT 行业加班,到底有没有价值?

单链表操作

原创 2016年08月30日 11:00:15
/*************单链表的操作函数总结*****************/

#include <QCoreApplication>
#include <iostream>
#include <stdio.h>
#include <malloc.h>

using namespace std;

struct STU{
    char name[20];
    char stuno[10];
    int age;
    int score;
}stu[50];
typedef struct STU ElemType;

struct LNODE{
    ElemType data;
    struct LNODE *next;
};
typedef struct LNODE LNode;
typedef struct LNODE *LinkList;

/*比较两个链表元素的大小*/
int Less_EqualList(ElemType *e1,ElemType *e2)
{
    if(strcmp(e1->name,e2->name) <= 0)
        return 1;
    else
        return 0;
}

/*打印链表*/
int printList(LinkList L)
{
    LinkList p;
    p = L;
    printf("name       stuno        age     score\n");
    while(p->next)
    {
        p = p->next;
        printf("%-10s %s\t%d\t%d\n",p->data.name,p->data.stuno,p->data.age,p->data.score);
    }

    return 1;
}

/*节点初始化*/
int init(LinkList *L)
{
    //用malloc动态分配节点
    *L = (LNode *)malloc(sizeof(LNode));
    if(!L)     //若分配失败,返回
        return 0;
    //初始化数据域
    memset(&((*L)->data),0,sizeof(struct STU));
   
    //初始化指针域
    (*L)->next = NULL;
    return 1;
}

/*测试数据是否存在*/
int GetElem(LinkList L,int i,ElemType *e)
{
    LinkList p;
    int j;
    
    p = L->next;
    j = 1;
    
    while(p && j<i){
        p = p->next;
        ++j;
    }
    
    if(!p || j>1)
        return 0;
    
    *e = p->data;
    return 1;
}

/*向链表中插入数据*/
int ListInsert(LinkList L,int i,ElemType e)
{
    LinkList p,s;
    int j;
    
    p = L;
    j = 0;
    
    while(p && j<i-1){
        p = p->next;
        ++j;
    }
    
    if(!p || j>i-1)
        return 0;
    
    s = (LinkList)malloc(sizeof(LNode));
    s->data = e;
    
    s->next = p->next;
    p->next = s;

    return 1;
}

/*从链表中删除数据*/
int ListDelete(LinkList L,int i)
{
    LinkList p;
    int j;
    p = L;
    j = 0;
    while(p && j<i-1)
    {
        p = p->next;
        ++j;
    }
    if(!p || j>i-1)
        return 0;

    p->next = p->next->next;
    p->next->data = p->next->next->data;

    return 1;
}

/*合并两个链表*/
void MergeList(LinkList La,LinkList Lb,LinkList *Lc)
{
    /*合并单链表La和Lb到Lc中*/
    LinkList pa,pb,pc;
    pa = La->next;
    pb = Lb->next;
    *Lc = pc = La;

    while(pa && pb)
    {
        if(Less_EqualList(&pa->data,&pb->data))
        {
            pc->next = pa;
            pc = pa;
            pa = pa->next;
        }
        else
        {
            pc->next = pb;
            pc = pb;
            pb = pb->next;
        }
    }
    pc->next = pa?pa:pb;
    free(Lb);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    struct STU e; //定义一个data
    LinkList La,Lb,Lc;
    printf("\n\n----------List Demo is running...----------\n\n");
    printf("First is InsertList function.\n");

    init(&La);
    strcpy(e.name,"stu1");
    strcpy(e.stuno,"100001");
    e.age = 80;
    e.score = 1000;
    ListInsert(La,1,e);

    strcpy(e.name,"stu3");
    strcpy(e.stuno,"100002");
    e.age = 80;
    e.score = 1000;
    ListInsert(La,2,e);

    printList(La);
    getchar();

    strcpy(e.name,"stu5");
    strcpy(e.stuno,"100003");
    e.age = 80;
    e.score = 1000;
    ListInsert(La,3,e);

    printList(La);
    getchar();

    init(&Lb);
    strcpy(e.name,"stu2");
    strcpy(e.stuno,"100001");
    e.age = 80;
    e.score = 1000;
    ListInsert(Lb,1,e);

    strcpy(e.name,"stu4");
    strcpy(e.stuno,"100002");
    e.age = 80;
    e.score = 1000;
    ListInsert(Lb,2,e);

    strcpy(e.name,"stu6");
    strcpy(e.stuno,"100001");
    e.age = 80;
    e.score = 1000;
    ListInsert(Lb,3,e);

    printList(Lb);
    getchar();

    MergeList(La,Lb,&Lc);
    printList(Lc);
    getchar();

    return a.exec();
}

版权声明:资源共阅,资源共享。 举报

相关文章推荐

单链表的结构及其操作

单链表的结构及其操作 /** * 作者:LinX 2017/6/3 -2017/6/9 * 内容:单链表及其操作 */ #include #include typedef int...

线性表-顺序表和单链表的定义与基本操作

线性表接口定义:IListDS.cs public interface IListDS&lt;T&gt; { int GetLength(); //求长度 void Clear(); //清空操作 bool IsEmpty(); //判断线性表是否为空 void Append(T item); //附加操作 void Insert(T item, in

单链表的基本操作大全之C语言实现(一)

单链表的基本操作大全之C语言实现1. 单链表的定义链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的也可以是不连续的。为了建立起数据元素之间的关系,对于每个数据元素除了存放...

笔试面试常考数据结构-单链表常用操作编程实现

单链表是笔试以及面试手写代码中常考的数据结构之一。下面实现了单链表的常见操作:创建单链表、删除节点、打印单链表(包括正向打印以及逆向打印)、反转单链表、找出单链表的倒数第K个节点、合并两个有序单链表等操作。 <span style="font-family: KaiTi_GB2312; fo

单链表的基本操作

实验题目;单链表基本操作 实验目的;1.掌握用 C/C++语言调试程序的基本方法。 2.掌握线性表的基本运算,如插入、删除等 •  实验内容;编写程序实现单链表的各种基本运算,并在此基础上设计一个主程...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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