當前位置:首頁 » 編程語言 » c語言鏈表的排序

c語言鏈表的排序

發布時間: 2025-01-25 06:48:17

㈠ 在數據結構中用c語言怎麼編寫用單鏈表將26個字母排序的程序

#include <stdio.h>
#include <stdlib.h>

//申明鏈表
typedef struct node
{
char num;
struct node *next;
}list;

void Bubble_sort(list *L);//鏈表的冒泡排序
void Dis_list(list *L);//遍歷單鏈表

int main()
{
//建表
list *r,*s,*p;
int n=26;//存儲數據的個數
s=NULL;
for(int i='Z';i>='A';i--)
{
r=(list *)malloc(sizeof(list));
r->num = i;
if(!s){s=r;p=s;}
p->next=r;
p=r;
}
p->next=NULL;
printf("排序前:\t");
Dis_list(s);
//排序
Bubble_sort(s);
printf("排序後:\t");
Dis_list(s);
return 0;
}

void Dis_list(list *L)
{
list *r;
r=L;
while(r!=NULL)
{
printf("%c\t",r->num);
r=r->next;
}
printf("\n");
}

void Bubble_sort(list *L)
{
list *r,*s;
char temp;
for(r=L;r;r=r->next)
{
for(s=r;s;s=s->next)
{
if(r->num>s->num)
{
temp=r->num;
r->num=s->num;
s->num=temp;
}
}
}
}

㈡ c語言鏈表插入法求解下列問題

根據題意:

一、鏈表創建:根據輸入的數字,動態創建任意多個節點插入鏈表。(題目規定n<=40,如不想使用malloc動態申請內存,需直接定義最大上限40個節點)。

二、鏈表排序:交換節點內容(不是地址),保留鏈表指針的值(*next的值)。

三、列印鏈表:利用鏈表指針遍歷鏈表。

四、對動態申請的鏈表地址空間釋放(在本程序中創建後程序就結束了,即使不寫free釋放,結束後也會釋放。但在復雜程序中調用創建,後續還有代碼,需像我代碼中寫函數動釋放不用的內存,避免浪費)。

下面是代碼:

#include <stdio.h>

#include <malloc.h>

typedef struct numStruct

{

int num;

struct numStruct *next;

}NST;

NST *insert2List(int num);//根據數字創建節點(動態),插入鏈表(首次自動生成頭節點),成功返回頭節點,失敗返回NULL。

void showList(NST *nsthead);//列印鏈表

void px(NST *nsthead);//鏈表排序

void freeList(NST *nsthead);//釋放鏈表內存

int main()

{

NST *nsthead=NULL;

int i=0,n=50,*nums=NULL;

while(n>40)

scanf("%d",&n);

nums=(int *)malloc(sizeof(int)*n);

if(!nums) return 1;

while(i<n)

scanf("%d",&nums[i++]);

i=0;

while(i<n)

nsthead=insert2List(nums[i++]);

px(nsthead);

showList(nsthead);

freeList(nsthead);

return 0;

}

void freeList(NST *nsthead)

{

NST *temp=NULL,*nst=NULL;

if(nsthead)

{

nst=nsthead->next;

while(nst!=NULL)

{

temp=nst;

nst=nst->next;

free(temp);

}

}

free(nsthead);

}

void showList(NST *nsthead)

{

if(nsthead)

while(nsthead->next!=NULL)

{

printf("%d ",nsthead->next->num);

nsthead=nsthead->next;

}

printf(" ");

}

void px(NST *nsthead)

{

NST *nt1=NULL,*nt2=NULL,ntTemp,*nextSave=NULL;

if(nsthead)

{

nt1=nsthead->next;

while(nt1)

{

nt2=nt1->next;

while(nt2)

{

if(nt1->num>nt2->num)

{

ntTemp=*nt1;

nextSave=nt1->next;

*nt1=*nt2;

nt1->next=nextSave;

nextSave=nt2->next;

*nt2=ntTemp;

nt2->next=nextSave;

}

nt2=nt2->next;

}

nt1=nt1->next;

}

}

}

NST *insert2List(int num)

{

static NST *nsthead=NULL,*nstTail=NULL;

NST *nstNew=NULL;


nstNew=(NST *)malloc(sizeof(NST));

if(!nstNew) return NULL;

nstNew->next=NULL;

nstNew->num=num;

if(!nsthead)

{

nsthead=(NST *)malloc(sizeof(NST));

if(!nsthead) return NULL;

nsthead->next=nstNew;

}

else

nstTail->next=nstNew;

nstTail=nstNew;

return nsthead;

}

㈢ C語言:單鏈表排序 有三個單鏈表程序 想知道每句運行下的意思(演算法

1:Linklist * inserSort(Linklist *L) /*函數參數是一個鏈表的指針L,返回的也是這個指針,是排序好了的鏈表。*/
2:{
3: Linklist *p=L->next;/*p指向鏈表第一個節點。*/
4: Linklist *r;
5: Linklist *q;
6: int i;
7: int j;
8: int x;
9: int n=lengList(L);/*獲取鏈表的節點總個數,存入n。*/
10: for(i=1;i<n;i++)/*這個for循環配合23行,讓p依次指向鏈表的第1個節點到倒數第2個節點。
這顯而易見啊:循環了n-1次,每次都執行23行「p=p->next」。*/
11: {
12: q=p->next;/*讓q指向p的下一個節點*/
13: for(j=i+1;j<=n;j++)/*12行、這行的for循環和21行,讓q依次指向p之後的節點一直到鏈表末尾。*/
14: {
15: if(p->data>q->data) /*看p中的數據是否比q中的大*/
16: {
17: x=p->data; /*這17,18,19三行是交換pq兩節點的數據*/
18: p->data=q->data; /**/
19: q->data=x; /**/
20: }
21: q=q->next;
22: }
23: p=p->next;
24: }
25: return L;
26:}

以下是上面解釋的動態例子:括弧中是鏈表節點的數據,共4個節點,用1234標明。
1(5)->2(8)->3(2)->4(7)
i=1時:p->1(5)
j=2時:
p->1(5),q->2(8),if不成立,q->3(2)
j=3時:
p->1(5),q->3(2),if成立,交換,鏈表為1(2)->2(8)->3(5)->4(7),q->4(7)
j=4時:
p->1(2),q->4(7),if不成立q->5(null)
i=2時: p->2(8)
j=3時:
p->2(8),q->3(5),if成立,交換,鏈表為1(2)->2(5)->3(8)->4(7),q->4(7)
j=4時:
p->2(5),q->4(7),if不成立,q->5(null)
i=3時:p->3(8)
j=4時:
p->3(8),q->4(7),if成立,交換,鏈表為1(2)->2(5)->3(7)->4(8),q->5(null)
至此,排序流程走完,鏈表從5827排成了2578。

很不好意思,筆者由於重重原因現在僅能完成第一部分,希望能幫上你。

熱點內容
領航s1配置怎麼樣 發布:2025-01-26 09:58:10 瀏覽:763
公司區域網搭建伺服器搭建 發布:2025-01-26 09:16:56 瀏覽:433
android裁剪圓形圖片 發布:2025-01-26 09:05:56 瀏覽:411
小貸源碼 發布:2025-01-26 08:20:58 瀏覽:536
更換電腦名登錄伺服器 發布:2025-01-26 07:56:52 瀏覽:240
後台phpjava 發布:2025-01-26 07:12:34 瀏覽:657
微信解綁密碼是什麼 發布:2025-01-26 06:50:07 瀏覽:734
app如何訪問伺服器 發布:2025-01-26 06:36:56 瀏覽:741
拳皇安卓單機哪裡下載 發布:2025-01-26 06:30:46 瀏覽:539
注冊會員時積分消費密碼是什麼 發布:2025-01-26 06:30:45 瀏覽:247