百韵网 >>  正文

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

来源:www.baiyundou.net   日期:较早时间
调试过的
没什么大的毛病

#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语言编写查找、排序的应用~

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

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

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

相关要点总结:

15791936689:算法上机实验如图所示,用c语言实现?
李话答://需要一个队列作为辅助数据结构 node* q[100];//队列 int f=0,r=0;//头,尾指针 q[r++]=tree;//根结点入队 while(f!=r){ node *t=q[f++];//出队 printf("%d ",t->data);//输出 if(t->L!=NULL){//非空左孩子入队 q[r++]=t->L;} if(t->R!=NULL){//非空右...

15791936689:数据结构二叉树的程序,用c语言怎么实现?
李话答:您好,想要实现一个二叉树,需要用到结构体来存储每个节点的信息,并使用指针来存储每个节点的左右子节点的地址。具体的实现方法可以参考下面的代码示例:include <stdio.h> include <stdlib.h> struct TreeNode { int val;struct TreeNode *left;struct TreeNode *right;};struct TreeNode* createNode...

15791936689:用C语言编写以下算法: 一个5个节点的有向图,有向线段上有权重即T[i...
李话答:写C程序,随机给出n*n的邻接矩阵,并打印输出邻接矩阵,以及有向图的边的个数,每个顶点的度,并判断该图中是否存在Euler回路: (1)如果为n阶,则随机产生一个n*n的邻接矩阵; (2)输出邻接矩阵,边的个数,每个顶点的度以及图中是否存在Euler回路。 这个题目涉及到了两个主要的知识点,一个...

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

15791936689:C语言 数据结构中解决冲突的方法是什么
李话答:这些就是建立在哈希表上的常用基本运算。4.1 应用的简单原则 什么时候适合应用哈希表呢?如果发现解决这个问题时经常要询问:"某个元素是否在已知集合中?",也就是需要高效的数据存储和查找,则使用哈希表是最好不过的了!那么,在应用哈希表的过程中,值得注意的是什么呢?哈希函数的设计很重要。一个...

15791936689:数据结构算法实现:利用两个线性表LA和LB分别表示两个集合A和B,现要求...
李话答:length)return i;else return 0;} void print(ElemType *c){ printf("%d ",*c);} status ListTraverse(sqlist l,void(*vi)(ElemType *)){ ElemType *p;int i;p=l.elem;for(i=1;i<=l.length;i++)vi(p++);printf("\n");return OK;} void Union(sqlist *la,sqlist lb)...

15791936689:求数据结构课程设计(C语言)—排序综合!利用随机函数产生N个随机整数(2...
李话答:回答:给你发了 不只3种 给你5种了 363173922的 记得给我加分 有问题加我再给你解决 没分就免谈 好了都给你搞定了

15791936689:数据结构中用C语言写:利用栈实现十进制数 N和其它 d进制数的转换。_百...
李话答:工具/材料:以Microsoft Visual Studio 2010为例。1、首先在桌面上,点击“Microsoft Visual Studio 2010”图标。2、然后在该界面中,输入初始化栈的代码“void InitStack(SqStack *SS){ SS->base = (SqNode *)malloc(sizeof(SqNode)); SS->top = SS->base;}”。4、之后在该界面中,输入压...

15791936689:数据结构的算法:写出一算法输出已知顺序表A中元素的最大值和次最大值...
李话答:C:max1 = a[0]; //最大值 max2 = a[0]; //次大值 for(i=1;i<num;i++){ if(a[i] > max1){ max2 = max1;max1 = a[i];} else if(a[i] > max2){ max2 = a[i];} else ; //不用做 } 参考吧:c++,最小和次小值。/ min2.cpp 求任意序列的最小值和次小...

15791936689:数据结构测试题用c语言实现?
李话答:int score[2]={0};//score[0]记录优秀人数,score[1]记录不及格的人数 void create(link &T)//先序建树 { int n;scanf("%d",&n);if(n==-1)T=NULL;//-1代表空结点,该结点置空 else {//分配内存 T=(link)malloc(sizeof(tree));T->data=n;//结点数据域赋值 create(T->l);/...

(编辑:本站网友)
相关推荐
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 百韵网