数据结构(c语言版)和数据结构区别

2024-05-05 11:24

1. 数据结构(c语言版)和数据结构区别

C语言是一种编程的语言,编程的语言有很多种。
而数据结构则是讲的是关于一些数据的理论知识。
可以说不管什么编程语言都能用到数据结构的知识,数据结构是程序设计基础又核心的知识。
可以将c语言想象为一种语言,那么数据结构就是一种说话的技巧,如何让你说话更简洁,有逻辑,容易让人听懂,这表达技巧不管你用中文或者ENGLISH都可以用上。
当然,如果你想成为一个优秀的程序设计人员,数据结构是必须掌握好的

数据结构(c语言版)和数据结构区别

2. c语言数据结构?

 



解答如图所示,学习过程中要多动手画图,每一步哪个指针指向哪,执行完后链表变成什么样子自己动手画画有助于理解,有不明地方可以追问,祝学习愉快~

3. java中都有哪些数据结构??

数据结构:
		①数组 (Array)
			在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数
			据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组
			元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指
			针数组、结构数组等各种类别。
		②栈 (Stack)
			栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后
			的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
		③队列 (Queue)
			一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行
			插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
		④链表 (Linked List)
			一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
			链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:
			一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
		⑤树 (Tree)
			树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
			(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)
			(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
			(3)K中各结点,对关系N来说可以有m个后继(m>=0)。
		⑥堆 (Heap)
			在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指
			二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
		⑦图 (Graph)
			图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,
			边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
		⑧散列表 (Hash)
			若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称
			这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
差不多我就知道这些了~

java中都有哪些数据结构??

4. java数据结构

首先明确,带权路径长度WPL最小的二叉树称作最优二叉树或哈夫曼树

那么比如说有4个节点,分别带权7,5,2,4如下ab两图
WPLa=7*2+5*2+2*2+4*2=36
WPLb=7*1+5*2+2*3+4*3=35

可以看到,出现概率越小的越应该放在下面(也就是说被遍历的概率小就可以代价大一点,而容易便利到的一定要减少开销)

其实是有一套算法的...从底往上,找最小的两个节点做和,做和得到的新结点和未被计算的节点重复“最小两节点做和”操作      最终结果:

WPL=30*2+5*5*4+8*4*15*3+15*2+27*2= 
不算了  口算不行... 看上式也知道你出现的概率越大,相当于基地越大,就给你乘个小的代价,必然是最优的。

5. java中有哪些数据结构

数据结构:
		①数组 (Array)
			在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数
			据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组
			元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指
			针数组、结构数组等各种类别。
		②栈 (Stack)
			栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后
			的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
		③队列 (Queue)
			一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行
			插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
		④链表 (Linked List)
			一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
			链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:
			一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
		⑤树 (Tree)
			树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
			(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)
			(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
			(3)K中各结点,对关系N来说可以有m个后继(m>=0)。
		⑥堆 (Heap)
			在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指
			二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
		⑦图 (Graph)
			图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,
			边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
		⑧散列表 (Hash)
			若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称
			这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
差不多我就知道这些了~

java中有哪些数据结构

6. c语言版的数据结构和c++版的数据结构有什么不同

  C语言和C++描述数据结构最大的区别在于设置思想,C语言是一种结构化程序设计语言,而C++是一种面向对象的程序设计语言,它两者的区别主要在于数据和操作的关系。

  C语言是定义数据类型,数据类型定义变量,然后函数操作变量,换句话说C语言是“操作的数据”。
  C++是定义类,类本身就具备操作,换句话说,C++是“数据的操作”。

7. 数据结构算法与c语言的关系?

  C语言是工具,数据结构是基础,算法是核心且有难有易,初级的编程只要懂编程语言和一般算法即可,至于数据结构可作一般了解;中级的编程要对数据结构和算法有深入的理解和掌握;高级的编程就需要完全理解各种数据结构以及自己编写算法了!不过现在的很多程序员都是在中级阶段的居多吧!

数据结构算法与c语言的关系?

8. 数据结构 C语言

你这题目要求不明确。
我尽量把所有可能功能写进去。
1、输入分自动输入和手动输入两种模式,都是生成单链表。手动有输入验证
2、输入大写字母按顺序添加到链表,我写了2中排列(1、按ascii码排列。2、按字母顺序排列)



#include #include typedef struct abc{    char c;    struct abc *next;}ABC;void MeError(ABC *lets);//内存申请异常ABC *add2Lits(ABC *abcHead,ABC *abcTail,char c);//向链表添加字母ABC *deleteByInx(ABC *abcHead,ABC *abcTail,int inx);//删除指定位置,返回尾节点,参数inx:第几个节点ABC *insert2List(ABC *abcHead,ABC *abcTail,char c,int x);//向链表顺序位置插入大写字母(x=1按照ASCII码顺序插入,x=0按照字母顺序插入)ABC *inputLet(ABC *abcHead,ABC *abcTail,int flag);//顺序输入26个小写字母void printfList();//打印链表int maxlen=26;//链表总长度int main(){    int i;    char c;    ABC *abcHead=NULL,*abcTail=NULL;    abcHead=(ABC *)malloc(sizeof(ABC));    MeError(abcHead);    abcHead->next=NULL;    printf("1、自动录入小写字母输入0,手动录入输入1:");    scanf("%d",&i);    abcTail=inputLet(abcHead,abcTail,i);    printfList(abcHead);    printf("\n2、请输入要删除第几个字母:");    scanf("%d",&i);    abcTail=deleteByInx(abcHead,abcTail,i);    printfList(abcHead);    printf("\n3、请输入要插入的大写字母:");    getchar();    scanf("%c",&c);    getchar();    printf("--按ASCII码顺序插入输入1,按照字母顺序插入输入0:");    scanf("%d",&i);    abcTail=insert2List(abcHead,abcTail,c,i);    printfList(abcHead);    return 0;}void printfList(ABC *abcHead)//打印链表{    printf("打印链表内容:\n");    while(abcHead->next!=NULL)    {        printf("%c ",abcHead->next->c);        abcHead=abcHead->next;    }    printf("\n");}ABC *inputLet(ABC *abcHead,ABC *abcTail,int flag)//顺序输入26个小写字母,参数flag>0:手动输入,flag=0自动输入{    int i=maxlen;    char lc=0,c;    if(!flag)    {        printf("--按照顺序自动输入26个小写字母......\n");        c='a';        while(i--)            abcTail=add2Lits(abcHead,abcTail,c++);        return abcTail;    }    printf("--按照顺序输入26个小写字母......\n");    getchar();    while(i--)    {        printf("输入第%d个字母:",26-i);        scanf("%c",&c);        getchar();        if((lc==0 && c!='a')||(lc!=0 && c-lc!=1))        {            printf("错误!请按照小写字母顺序重新");            i++;            continue;        }        else        {            lc=c;            abcTail=add2Lits(abcHead,abcTail,c);        }    }    return abcTail;}void MeError(ABC *lets)//内存申请异常{    if(!lets)    {        printf("内存申请失败!\n");        exit(0);    }}ABC *add2Lits(ABC *abcHead,ABC *abcTail,char c)//向链表添加字符,返回尾节点{    ABC * abcNew=(ABC *)malloc(sizeof(ABC));    MeError(abcNew);    abcNew->c=c;    abcNew->next=NULL;    if(abcHead->next==NULL)        abcHead->next=abcNew;    else        abcTail->next=abcNew;    abcTail=abcNew;    return abcTail;}ABC *deleteByInx(ABC *abcHead,ABC *abcTail,int inx)//删除指定位置,返回尾节点,参数inx:第几个节点{    int i=0,flag=0;    ABC *abcNext=NULL;//要删除的节点的后一个节点    while(abcHead->next!=NULL)    {        i++;        abcNext=abcHead->next->next;        if(i==inx)        {            if(abcHead->next==abcTail)                abcTail=abcHead;            free(abcHead->next);            abcHead->next=abcNext;            flag=1;            maxlen--;            break;        }        abcHead=abcHead->next;    }    if(flag==0)        printf("未找到指定的字母\n");    return abcTail;}ABC *insert2List(ABC *abcHead,ABC *abcTail,char c,int x)//向链表顺序位置插入大写字母(x=1按照ASCII码顺序插入,x=0按照字母顺序插入){    ABC *abcNext=NULL,*abcNew=NULL;    abcNew=(ABC *)malloc(sizeof(ABC));    abcNew->c=c;    abcNew->next=NULL;    while(abcHead->next!=NULL)    {        abcNext=abcHead->next->next;        if((x==1 && (abcNext==NULL || cnext->c))||(x==0 && (abcNext==NULL || c+32next->c)))        {            abcNew->next=abcHead->next;            abcHead->next=abcNew;            break;        }        abcHead=abcHead->next;    }    return abcTail;}