① 数据结构中常见的算法(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]<a[j+1])
{
/*交换元素*/
ptr2=a[j+1];
a[j+1]=a[j];
a[j]=ptr2;
}
}
}
printf("\n排序后的数字串:");
for(i=0;i<N;i++)
{
printf("%d",a[i]);
}
printf("\n");
}
2、统计字符个数
#include<stdio.h>
void main()
{
char line[100];
int i,count=0;
printf("\n请输入一行字符: ");
gets(line);
i=0;
while(line[i]!='\0')
{
if(line[i]=='x'||line[i]=='X')
{
count++;
}
i++;
}
printf("\n其中X的个数为%d\n",count);
}
3、数字翻转
#include<stdio.h>
void main()
{
int a,b;
a=0;
do
{
printf("\n请输入一个数:");
scanf("%d",&a);
if(a<=0)
printf("该数必须为正数\n");
}while(a<=0);
printf("\n反转后的数为:");
do
{
b=a%10;
printf("%d",b);
a=a/10;
}while(a!=0);
printf("\n");
}
我这里还有好多,需要的联系我QQ
② c语言 数据结构与算法
例2-1 利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B。
void union(List &La,List Lb) {
La-len=listlength(La);
Lb-len=listlength(Lb);
for(I=1;I<=lb-len;I++) {
getelem(lb,I,e);
if(!locateelem(la,e,equal))listinsert(la,++la-en,e)
}
}
算法2.2
例2-2 巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。
此问题的算法如下:
void mergelist(list la,list lb,list &lc)
initlist(lc);
I=j=1;k=0;
la-len=listlength(la);
lb-len=listlength(lb);
while((I<=la-len)&&(j<=lb-len)){
getelem(la,I,ai);getelem(lb,j,bj);
if(ai<=bj){listinsert(lc,++k,ai);++I;}
else{listinsert(lc,++k,bj);++j;}
}
while(I<=la-len){
getelem((la,I++,ai);listinsert(lc,++k,ai);
}
while(j<=lb-len){
getelem((lb,j++,bj);listinsert(lc,++k,bi);
}
}
顺序栈的类型定义如下:
# define StackSize 100
typedef char datatype;
typedef struct {
datatype data[stacksize];
int top;
}seqstack;
设S是SeqStack类型的指针变量。若栈底位置在向量的低端,即s–>data[0]是栈底元素,那么栈顶指针s–>top是正向增加的,即进栈时需将s–>top加1,退栈时需将s–>top 减1。因此,s–>top<0表示空栈, s–>top =stacksize-1表示栈满。当栈满时再做进栈运算必定产生空间溢出,简称“上溢”;当栈空时再做退栈运算也将产生溢出,简称“下溢”。上溢是一种出错状态,应该设法避免之;下溢则可能是正常现象,因为栈在程序中使用时,其初态或终态都是空栈,所以下溢常常用来作为程序控制转移的条件。
3、判断栈满
int stackfull(seqstack *s)
{
return(s–>top==stacksize-1);
}
4、进栈
void push(seqstack *s,datatype x)
{
if (stackfull(s))
error(“stack overflow”);
s–>data[++s–>top]=x;
}
1、置空栈
void initstack(seqstack *s)
{
s–>top=-1;
}
2、判断栈空
int stackempty(seqstack *s)
{
return(s–>top==-1);
}
5、退栈
datatype pop(seqstack *s)
{
if(stackempty(s))
error(“stack underflow”);
x=s–>data[top];
s–>top--;
return(x)
//return(s–>data[s–>top--]);
}
6、取栈顶元素
Datatype stacktop(seqstack *s)
{
if(stackempty(s)
error(“stack is enpty”);
return s–>data[s–>top];
}
③ c语言数据结构
对于排序算法来说,不管用哪种算法实现,都是要做“比较”操作和“移动”操作(或者说交换)。第(2)条要求就是要你分别统计“选择排序、插入排序、交换排序、归并排序等各种排序方法”,在对100个元素进行排序时,分别作了多少次“比较”操作和多少次“移动”操作。
对于查找算法来说,不管用哪种算法实现,,都是要做“比较”操作。第(3)条要求,就是要你分别统计顺序查找和二分查找,分别要做多少次“比较”操作。
④ C语言数据结构与算法:链表
先搞清楚基本概念,不懂再问
//返回一个带头结点的且具有五个结点的链表
link*initLink()
{
link*p=(link*)malloc(sizeof(link));//创建头结点
link*temp=p;//使用变量temp在下面创建结点时指向链表末端
for(inti=1;i<5;i++)
{
link*a=(link*)malloc(sizeof(link));//创建一个结点
a->elem=i;//为结点赋值
a->next=NULL;//指针域暂时赋为NULL,若后面还要创建结点的话再修改
temp->next=a;//因为temp指向链表末端,即最后一个结点
//故该节点指针域应指向刚才创建的结点a
temp=temp->next;//连接好以后,temp指向下一个结点(刚才创建的结点a,现在是链表末端)
}
returnp;//返回头结点
}
⑤ 数据结构算法与c语言的关系
C语言是工具,数据结构是基础,算法是核心且有难有易,初级的编程只要懂编程语言和一般算法即可,至于数据结构可作一般了解;中级的编程要对数据结构和算法有深入的理解和掌握;高级的编程就需要完全理解各种数据结构以及自己编写算法了!不过现在的很多程序员都是在中级阶段的居多吧!
⑥ C语言与算法和数据结构的关系
① 不要认为单独学C很难真正编写出程序。
② 不要太认为你没学数据结构和算法难以解决实际编程问题。
③ C语言只要你熟练掌握,这就是你学Data structure and Algorithms 的基础。
④ 学好数构和算法的前提是:你C语言用得比较熟练了(特别是指针、复合变量、数组的编程运用)
⑤ 最后,你只要看一本关于数据结构和算法的书就够了《算法导论》(国外的那本),如果要深入搞懂它,最好看它之前看Knuth的一本《Concrete Mathematics》。算法导论算是算法与数据结构的圣经了,里面充分讲了算法和数据结构的大部分理论和实践。
⑥另外,算法和数据结构是有深刻关系的,但是你完全可以学算法的时候不用复杂数据结构就能解决大部分问题;或者不用复杂算法,单凭构造复杂数据结构解决复杂问题。
⑦ 数据结构与算法和c语言有什么关系吗
数据结构和算法在本质上说和C语言没有关系,C语言仅仅是描述工具而已,就像要讲一个故事,可以用汉语,也可以用英语。数据结构和算法同样可以用java,用c#等语言,甚至自然语言也可以描述。
数据结构与算法是计算机科学,具体的实现无非就是些数据交换和变化,这些交换和变化大都是在内存中进行的,而c/c++操作内存的能力要强于其他语言(当然汇编在操作内存方面更强,但离自然语言太远,不易理解),所以学习数据结构和算法就常使用c/c++语言当作描述工具。
⑧ 数据结构算法【C语言】
#include<stdio.h>
int main()
{
char s[30],str2[30],ch;
int i,j=0;
for(i=0;i<30;i++)
{
s[i]='\0';
str2[i]='\0';
}
printf("请输入字符串:");
scanf("%s ",&s);
printf("请输入要删除的字符:");
scanf("%c",&ch);
for(i=0;i<30;i++)
{
if(s[i]=='\0')break;
if(s[i]==ch)continue;
else
{
str2[j]=s[i];
j++;
}
}
printf("删除后的字符串是:%s\n",str2);
return 0;
}
⑨ C语言数据结构算法
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}Node;
Node *Create( void )
{
Node *head, *p1, *p2;
int ch = 'y';
head = ( Node * )malloc( sizeof( Node ) );
p2 = head;
while( ch == 'y' || ch == 'Y' ){
printf( "Please input a number: " );
p1 = ( Node * )malloc( sizeof( Node ) );
scanf( "%d", &p1->data );
p2->next = p1;
p2 = p1;
printf("Do you want to continue?(y/n)");
if( ( ch = getchar() ) == 'n' || ( ch = getchar() ) == 'N' )
break;
}
p2->next = NULL;
return( head );
}
Node *Delete( Node *head )
{
int maxk, mink;
Node *p1, *p2, *p3;
printf("Please input mink and maxk(mink must < maxk): ");
scanf( "%d%d", &mink, &maxk );
p1 = head;
p2 = head->next;
while( p2 != NULL ){
if( p2->data < mink || p2->data > maxk ){
p1->next = p2->next;
p3 = p2;
p2 = p2->next;
free( p3 );
continue;
}
p1 = p2;
p2 = p2->next;
}
return( head );
}
void Display( Node * head )
{
Node *p1;
p1 = head->next;
while( p1 != NULL ){
printf( "%d\t", p1->data );
p1 = p1->next;
}
printf( "\n" );
return;
}
int main( void )
{
Node *head = NULL;
head = Create();
Display( head );
head = Delete( head );
Display( head );
return( 0 );
}
⑩ C语言中算法于数据结构是什么求详解!
算法与数据结构中,首先需要学习的是数据结构,比如说列表或者是队列,还有各种树等。这些都是用来在不同的场合中储存不同的数据,而算法则是处理一个问题时的方法,具体来说,比如排序算法,有快排,冒泡排序,插入排序,希尔排序,归并排序等等,学习算法可以让你的程序更有效率,执行起来更快。大体就是这样吧,学习完语言之后就可以学习算法了,非常有用