當前位置:首頁 » 編程語言 » 數據結構C語言正確寫法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

數據結構C語言正確寫法

發布時間: 2022-05-21 11:20:48

1. 數據結構(使用c語言

->叫做SmartPoint,是針對指針而使用的一種操作符,在L->size中,L是某一指針,L->size就是調用指針L指向的對象的size屬性.
int
ListInsert(SeqList
*L,int
i,DataType
x)中第一個SeqList
*L指的是需要一個指向SeqList的指針,int是需要一個整數,DataType
x是指需要一個DataType類型的量,這個ListInsert方法的參數列表(也就是括弧中的內容)指的是在列表L中的i位置插入一個類型為DataType的元素

2. 數據結構(用c語言寫代碼)

voidselectionSort(DataTypea[],intn){
inti,j,p;
DataTypetem;
for(i=1;i<n;i++){
p=0;
for(j=1;j<n-i;++j){
if(a[p]<=a[j]){
p=j;
}
}
tem=a[p];
a[p]=a[n-i];
a[n-i]=tem;
}
}

選擇排序演算法給你,其他的我懶得看了。。。。要睡覺。。。困。。。

3. 數據結構 C語言

你這題目要求不明確。

我盡量把所有可能功能寫進去。

1、輸入分自動輸入和手動輸入兩種模式,都是生成單鏈表。手動有輸入驗證

2、輸入大寫字母按順序添加到鏈表,我寫了2中排列(1、按ascii碼排列。2、按字母順序排列)

#include<stdio.h>
#include<malloc.h>
typedefstructabc
{
charc;
structabc*next;
}ABC;
voidMeError(ABC*lets);//內存申請異常
ABC*add2Lits(ABC*abcHead,ABC*abcTail,charc);//向鏈表添加字母
ABC*deleteByInx(ABC*abcHead,ABC*abcTail,intinx);//刪除指定位置,返回尾節點,參數inx:第幾個節點
ABC*insert2List(ABC*abcHead,ABC*abcTail,charc,intx);//向鏈表順序位置插入大寫字母(x=1按照ASCII碼順序插入,x=0按照字母順序插入)
ABC*inputLet(ABC*abcHead,ABC*abcTail,intflag);//順序輸入26個小寫字母
voidprintfList();//列印鏈表
intmaxlen=26;//鏈表總長度
intmain()
{
inti;
charc;
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(" 2、請輸入要刪除第幾個字母:");
scanf("%d",&i);
abcTail=deleteByInx(abcHead,abcTail,i);
printfList(abcHead);

printf(" 3、請輸入要插入的大寫字母:");
getchar();
scanf("%c",&c);
getchar();
printf("--按ASCII碼順序插入輸入1,按照字母順序插入輸入0:");
scanf("%d",&i);
abcTail=insert2List(abcHead,abcTail,c,i);
printfList(abcHead);
return0;
}
voidprintfList(ABC*abcHead)//列印鏈表
{
printf("列印鏈表內容: ");
while(abcHead->next!=NULL)
{
printf("%c",abcHead->next->c);
abcHead=abcHead->next;
}
printf(" ");
}
ABC*inputLet(ABC*abcHead,ABC*abcTail,intflag)//順序輸入26個小寫字母,參數flag>0:手動輸入,flag=0自動輸入
{
inti=maxlen;
charlc=0,c;
if(!flag)
{
printf("--按照順序自動輸入26個小寫字母...... ");
c='a';
while(i--)
abcTail=add2Lits(abcHead,abcTail,c++);
returnabcTail;
}
printf("--按照順序輸入26個小寫字母...... ");
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);
}
}
returnabcTail;
}
voidMeError(ABC*lets)//內存申請異常
{
if(!lets)
{
printf("內存申請失敗! ");
exit(0);
}
}
ABC*add2Lits(ABC*abcHead,ABC*abcTail,charc)//向鏈表添加字元,返回尾節點
{
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;
returnabcTail;
}
ABC*deleteByInx(ABC*abcHead,ABC*abcTail,intinx)//刪除指定位置,返回尾節點,參數inx:第幾個節點
{
inti=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("未找到指定的字母 ");
returnabcTail;
}
ABC*insert2List(ABC*abcHead,ABC*abcTail,charc,intx)//向鏈表順序位置插入大寫字母(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||c<=abcHead->next->c))||(x==0&&(abcNext==NULL||c+32<=abcHead->next->c)))
{
abcNew->next=abcHead->next;
abcHead->next=abcNew;
break;
}
abcHead=abcHead->next;
}
returnabcTail;
}

4. 數據結構(C語言版)演算法的寫法

數據結構的演算法是種解題的思路,用什麼編譯器來檢查你的思路是否正確不是很重要,看自己擅長什麼語言就選什麼語言的編譯器,原理也基本上是一樣的,你可以用c vc++ c# java等等,他們的思路其實一樣,不一樣的是每種編譯器的語法規則不一樣,學數據結構的話最好是用編譯器來寫程序編譯後驗證自己的思路和演算法是否正確。下面我用的是排序的方法寫的,用的c編譯器。#include"stdio.h"
void main()
{int temp,a[3],i,j;<br>for(i=0;i<3;i++)<br>{printf("NO:%d\t",i+1);<br> scanf("%d",&a[i]);<br>}
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
{if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}
}
for(i=0;i<3;i++)
printf("%d ",a[i]);
getch();}

5. c語言數據結構

以上代碼中,用數組創建鏈表Createlist函數存在較多的邏輯錯誤,你得再好好理清思路,參考代碼如下:

linklist*Createlist(inta[],intn)
{
linklist*Head,*p,*q;
inti;
Head=(linklist*)malloc(sizeof(linklist));
Head->Next=NULL;
for(i=0;i<n;i++){
p=Head;//注意要保證初始條件
q=(linklist*)malloc(sizeof(linklist));
q->data=a[i];
while(p->Next!=NULL){
if(p->Next->data<q->data)
break;
else
p=p->Next;
}
q->Next=p->Next;//這兩句的位置問題?
p->Next=q;
}
returnHead;
}

6. 數據結構c語言

  1. 把scanf("%d ",&q->name);改成scanf("%s",q->name);。

  2. 把scanf("%d ",&q->score);改成scanf("%d",&q->score);。

  3. 函數studlist *CreateStudent()應該有一個返回值。若不需要返回值,請改成voidCreateStudent()。

  4. if(p->Next->score<q->score)中p->Next->score並未賦值,怎麼能與q->score比較?這里就會跳出運行。

  5. char name[3];中3太小隻能放下一個漢字或兩個字元。

  6. 適當的地方應該有釋放所申請的內存的語句。

7. 關於C語言數據結構的問題

說幾句我的理解:
1.&s是C++中的一種變數類型,叫做"引用"(reference),它的作用是給變數起一個別名.具體的用法你可以找一本C++的書來看看.在這里用引用變數是為了改變實參的值.(C中函數的值傳遞是單向的,只能由實參傳給形參.)
2.在C中,數組a[i]是轉化成*(a+i)來處理的,所以也可以用指針來定義數組,這個只是形式的不同罷了,熟悉C的人喜歡這樣使用,因為少了一步轉換,效率會高一些.
3.StackEmpty只是一個函數,估計前面定義的時候就寫成EmptyStack了,這個應該不是什麼要緊的問題吧.