用C语言实现数据结构中常用算法,如对链表的操作、查找、排序等。

作者&投稿:富往 (若有异议请与网页底部的电邮联系)
在线急求数据结构C语言编写查找、排序的应用~

去找一下严蔚敏的数据结构视频,可能不错。

数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图。数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。
1、数组
数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。
2、栈
栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。
3、队列
队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队。
4、链表
链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

5、树
树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
6、散列表
散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。
7、堆
堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
8、图
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
参考资料来源:百度百科—数据结构

调试过的
没什么大的毛病

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
typedef int ElemType;

typedef struct LNode {
ElemType date;
struct LNode *next;
}linklist,*link;

/*构造链表*//////////////////////////////////////
void IinitList(link &L)
{
if(L)delete L;
L= (link)malloc(sizeof(LNode)) ;
if (!L) exit(1);
L->next=NULL;
cout<<"链表已经建立\n";
}
//////////////////////////////////////////////////////
// /*删除结点*/// //////////////////////////////////////////////
int listdelete(link &L,int i,ElemType &e)
{
link p,q; int j;
p=L;j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}

q=p->next;
p->next=q->next;
e=q->date;free(q);
cout<<"链表已经删除\n";
return 1;
}
////////////////////////////////////////////// /////////
// /*插入结点*/////////////// ///////////////////////
int listinsert(link &L,int i,ElemType e)
{
link p,q;
int j;
p=L;j=0;
while(p&&j<i-1)
{
p=p->next;++j;
}
q= (link)malloc(sizeof(LNode));
q->date=e;
q->next=p->next;
p->next=q; cout<<"链表已经插入\n";
return 1;
}
/////////////////////////////////////////////////////
////*显示数据*///////// ////////////////////////////////
void show(link l)
{ link p; int j;
p=l;j=0;
cout<<"链表的值为:\n";
while(p->next)
{
cout<<p->next->date<<endl;
p=p->next;
}
}
//////////////////////// /////////////////////////////////
//////销毁链表////// ////////////////////////////////////////
void destorylinst(link &L)
{
while(L)
{ link p=L;
L=L->next;

free(p) ;
}
L=NULL;
}

////// 打印表头///////////////////////////////////////
void print()
{
cout<<"------------------------\n";
cout<<"------------------------\n";
}
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
////查找结点//// ////////////////////////////////////////

void lookfor(link l,int e)
{
if(l==NULL)
cout<<"链表未建立,请先构造链表\n" ;
else{
link p; int i=0,j=0;
p=l->next;
cout<<"你查找值的位置是:\n " ;
while(p)
{ if(p->date==e)
{ j++;
cout<<i+1<<endl;
}
p=p->next; i++;
}cout<<"查找完毕\n";
if(j==0)
cout<<"你查找的值不在链表中 、\n";

} }

void putline(link &l)
{
if(l==NULL ||l->next==NULL )
cout<<"链表未建立或是空的,请先构造链表\n" ;
else{
link p,q;
p=l->next;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(p->date>q->date)
{ ElemType t;
t=p->date;
p->date=q->date;
q->date=t;
}
q=q->next;
}
p=p->next;

} cout<<"链表已经排序 \n";
}

}

/////////////////////////////// //////////////////

///////////////////////////////////////////////////

//////测试函数///// /////////////////////

void main()
{ link L=NULL; int k;
while(1)
{
cout<<"按0退出\n"<<"按1建立\n"<<"按2插入\n"<<"按3删除\n"
<<"按4清空链表\n"<<"按5查找\n"<<"按6进行排续\n" ;
print();
int a,i,j;
cin>>a;
switch(a)
{ case 0: if(L!=NULL)

destorylinst(L) ;

exit(1);

case 1:
IinitList(L);
k=0;
print();
show(L) ;
cout<<"空的链表\n";
cout<<"链表长度为: "<<k<<endl;
print();
cout<<"是否要给链表插入值:y----n\n";
char yy;
yy=getchar();
if(yy=='y')
{
cout<<"请输入值!按回车键后输入下一个,输入0再按回车结束\n";
int bb;
cin>>bb;
while(bb!=0)
{ k++;
listinsert(L,k,bb) ;
cin>>bb;
}
print();
show(L) ; cout<<"链表长度为: "<<k<<endl;
}
else break;

print();
break;

case 2:
if(L!=NULL)

{
cout<<"输入位置:\n";
cin>>i;
while(i>k+1 || i<1)
{
cout<<"位置错误,重新输入插入位置\n" ;
cin>>i;
}
cout<<"输入植;\n";
cin>>j;
listinsert(L,i,j) ;
k++;
print();
show(L);
cout<<"链表长度为:"<<k<<endl;
print();
}
else
{ cout<<"链表不存在,请先建链表\n";
print(); }
break;

case 3:
if(L!=NULL)
{
cout<<"输入位置:\n";
cin>>i;
while(i>k || i<1)
{
cout<<"位置错误,重新输入删除位置\n" ;
cin>>i;
}
listdelete (L,i,j);
cout<<"你删除的是:\n";
cout<<j<<endl ;
k--; print();
show(L);
cout<<"链表长度为:"<<k<<endl;
print();
}
else {
cout<<"链表不存在,请先建链表\n";
print();
}
break;

case 4:
destorylinst(L) ;
cout<<"链表已经清空\n";
print();
break;

case 5:
print();
cout<<"输入要查找的值;\n";
int z;
cin>>z;
lookfor(L,z);
print();
break;
case 6:
putline(L);
if(L!=NULL)
show(L);
print();
break;

default:
break ;
}
}
delete L;
}

#include <iostream.h>

class ram
{
public:
char wenzi[200];
ram *p;
};

ram wo,*ai=&wo;

int num=0;//我申请了几次内存了

void xie(void);//输入数据,然后分配内存为下次做准备。
void du(void);//把写入的数据全部显示出来

int main(void)
{
while(1)//故意死循环
{
xie();
du();

}
return NULL;
}

void xie(void)
{
cin.getline(ai->wenzi,200);
cout<<"\n______________________________________________________\n";
if((ai->p=new ram)==NULL) {cout<<"内存申请失败\n";return;}
ai=ai->p;
num++;
}

void du(void)
{
ram *ni;
ni=&wo;
int a;
for(a=num;a>0;a--)
{
cout<<ni->wenzi;
cout<<"\n";
ni=ni->p;
}
cout<<"__________________________________________________________\n";

}

#include
<iostream.h>
class
ram
{
public:
char
wenzi[200];
ram
*p;
};
ram
wo,*ai=&wo;
int
num=0;//我申请了几次内存了
void
xie(void);//输入数据,然后分配内存为下次做准备。
void
du(void);//把写入的数据全部显示出来
int
main(void)
{
while(1)//故意死循环
{
xie();
du();
}
return
NULL;
}
void
xie(void)
{
cin.getline(ai->wenzi,200);
cout<<"\n______________________________________________________\n";
if((ai->p=new
ram)==NULL)
{cout<<"内存申请失败\n";return;}
ai=ai->p;
num++;
}
void
du(void)
{
ram
*ni;
ni=&wo;
int
a;
for(a=num;a>0;a--)
{
cout<<ni->wenzi;
cout<<"\n";
ni=ni->p;
}
cout<<"__________________________________________________________\n";
}


数据结构如何通过C语言来实现,请举例说明,尽可能详细
数据的结构无非就是表:线性表、链表,栈,队列,串,数组,树、二叉树,图,这几种。常用的使用指针,或数组建立数据结构,然后对其进行插入、删除、查找、排序等操作。以下是C语言实现的循环队列:include<stdio.h> include<stdlib.h> define MAX_QSIZE 5 struct SqQueue { QElemType *base; \/\/ ...

怎么做?数据结构的(C语言版)
include<stdlib.h> struct Data { int d;struct Data *next;};\/\/创建链表 struct Data* create(){ int i,n;struct Data *h,*p,*q;printf("请输入链表节点的数量:");scanf("%d",&n);if(n>0){ h=q=(struct Data*)malloc(sizeof(struct Data));printf("请输入第1个链表节点的数据...

C语言编写数据结构查找算法
1、建立一个线性表,对表中数据元素存放的先后次序没有任何要求。输入待查数据元素的关键字进行查找。为了简化算法,数据元素只含一个整型关键字字段,数据元素的其余数据部分忽略不考虑。建议采用前哨的作用,以提高查找效率。2、查找表的存储结构为有序表,输入待查数据元素的关键字利用折半查找方法进行...

C语言的数据结构是什么
数据结构,data strucure 是具有特定关系的数据元素的集合。它包含两方面的信息:D+S D 即数据元素的集合,也就是数据对象;S 数据元素间的关系,而这种关系指的是数据元素之间本身的关系 也叫做逻辑结构!而这种逻辑结构需要通过一种高级语言 比如c语言才能使得将这种逻辑结构在计算机中表现出来 ...

数据结构测试题用c语言实现?
T->data=n;\/\/结点数据域赋值 create(T->l);\/\/创建左子树 create(T->r);\/\/创建右子树 } } void pro(link T)\/\/先序遍历二叉树 { if(T){ printf("%d ",T->data);\/\/输出所有成绩 if(T->data>=90)score[0]++;\/\/记录优秀人数 if(T->data<60)score[1]++;\/\/记录不及格的人数 ...

c语言数据结构(考题,测试你的能力)--编写源代码
c语言数据结构(考题,测试你的能力)--编写源代码 一。构造动态分配顺序存储的线性表,并在其上实现以下操作:1.ListInsert(&L,i,e)在L中第i个位置前插入e2.ListDelete(&L,i,&e)删除L中的第i个元素,用e返回其值。3.PrintList(L)输出线... 一。构造动态分配顺序存储的线性表,并在其上实现以下操作:1....

C语言中所谓的数据结构是什么啊?
1.<stdio.h>一般写C语言程序都要加这个头文件,因为它包含scanf()、printf()等控制输入和输出的函数:包含的主要是和时间相关的函数 <string.h>主要包含用来拷贝或比较字符串的函数 <stdlib.h>主要包含这几个函数:malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、s...

数据结构c语言怎么运行啊
首先要确定你想采用线性表的顺序存储结构还是链式存储结构。以顺序存储结构为例:include <stdio.h> include <stdlib.h> define ERROR 0 define OK 1 typedef int Status;typedef int ElemType;\/\/顺序表测试用 const int MaxSize=100; \/\/100只是示例性的数据,可以根据实际问题具体定义 const int...

用C语言实现数据结构时需要哪些头文件?
1、stdio.h,这个是用来输入输出。动态内存分配函数要用到的,所以要包含malloc.h,其他的还可能用到字符(串)处理函数(需包含string.h头文件)、数学函数(需包含math.h),包含什么头文件主要看i你想用这些数据结构实现什么功能,用到什么函数。2、C语言常用头文件:ALLOC.H 说明内存管理函数(分配...

关于数据结构的问题,用C语言描述
符号表:一种用于语言翻译器中的数据结构 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 其他类似问题 2011-06-26 关于数据结构的问题,用C语言描述 2014-12-25 关于用C语言描述数据结构的问题 2011-03-17 数据结构的问题(C语言描述的) 4 2009-11-01 用c语言描述数据结构的问题 2 2009-04-21...

临城县17166909281: 用C语言实现数据结构中常用算法,如对链表的操作、查找、排序等. -
除勉高特: #include <iostream.h> class ram { public: char wenzi[200]; ram *p; }; ram wo,*ai=&wo; int num=0;//我申请了几次内存了 void xie(void);//输入数据,然后分配内存为下次做准备. void du(void);//把写入的数据全部显示出来 int main(void) { while(1)...

临城县17166909281: 用c语言怎么实现数据结构算法 -
除勉高特: c语言主要通过自己定义函数来实现数据结构,比如实现堆栈,实现了先输入后输出,用函数来实现各个接口; 但是C++也可以通过这个办法,来实现数据结构, 还有很简单,就是STL 框架,这个是系统自动定义的函数.用起来容易

临城县17166909281: C语言数据结构的算法
除勉高特: 常用的算法按其功能分有:查找,排序,逆序,遍历,替换,删除等.每一种功能又有很多实现的方法. http://wenku.baidu.com/view/d331d14533687e21af45a985.html

临城县17166909281: 数据结构如何通过C语言来实现,请举例说明,尽可能详细 -
除勉高特: 数据的结构无非就是表:线性表、链表,栈,队列,串,数组,树、二叉树,图,这几种.常用的使用指针,或数组建立数据结构,然后对其进行插入、删除、查找、排序等操作.以下是C语言实现的循环队列:#include<stdio.h>#include<...

临城县17166909281: 数据结构中常见的算法(C语言版) -
除勉高特: 1、冒泡排序(最容易考到)#include<stdio.h>#define N 5 void main() { int i=0,j=0; int a[n],temp; int *ptr1,*ptr2; ptr1=&a[j+1]; ptr2=&temp; printf("\n输入数字串:\n",N); for(i=0;i<N;i++) { scanf("%d",&a[i]); } for(i=0;i<N;i++) { for(j=0;j<N;j++) { if(a[j]<...

临城县17166909281: 数据结构算法【C语言】 -
除勉高特: #include void del(char *,char *,char); main() {char ch; char str[50...

临城县17166909281: 数据结构的算法如何变成C语言程序 -
除勉高特: 具体怎么实现的得靠自己了,因为数据结构中的算法都是类c语言,并不能上机实现,所以需要自己写成c的形式,并上机调试!!!其实真正锻炼自己能力的就是把算法变成c语言程序,没有什么好的方法,只能多练多调试!!!同时也可以参考下别人的代码,读明白了,在多练几次就会了!!!希望可以帮你!!c编程高手团队正在招新,有意者速速行动一起学习,一起努力!!

临城县17166909281: 数据结构(C语言版)算法的写法 -
除勉高特: 你用c语言写的话,并且通过编译,那叫程序,不叫算法.程序=算法+数据结构.算法可以有多种表达,如你用汉语去描述如何描述如何解决一个问题,那也叫算法.用类C也是表达算法的一种风格,不用通过编译.只是让人明白,你对问题的解决思想就行呀

临城县17166909281: C语言数据结构顺序表算法 -
除勉高特: 这个算法很简单啊,这里我给出一个核心函数,自己看看…… void del(int c,int r[],int n){//c为目标元素值,r为顺序表,n为表中元素个数int i,j;for (i=0;i<n;i++)if(r[i]==c) {for (j=i;j<n-1;j++) f[j]=f[j+1];n--;} }

临城县17166909281: C语言常用算法有哪些?最好能具体的举出来
除勉高特: 算法有很多种: 递归,回溯,排序,查找,穷举,贪心,分治,深度搜索,广度搜索,动态规划,拓扑排序等等. 另外,算法是独立的.还有一些C语言经典算法实例,网上有很多,可以搜搜.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网