① 數據結構中常見的演算法(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語言中演算法於數據結構是什麼求詳解!
演算法與數據結構中,首先需要學習的是數據結構,比如說列表或者是隊列,還有各種樹等。這些都是用來在不同的場合中儲存不同的數據,而演算法則是處理一個問題時的方法,具體來說,比如排序演算法,有快排,冒泡排序,插入排序,希爾排序,歸並排序等等,學習演算法可以讓你的程序更有效率,執行起來更快。大體就是這樣吧,學習完語言之後就可以學習演算法了,非常有用