單鏈表實現學生成績的冒泡排序
⑴ C++單鏈表冒泡排序
|///////////not test
int sort(STUDENT **head)
{
if( head == NULL )
return 0;
if( *head == NULL || (*head)->next == NULL)
return 1;
STUDENT *p = *head,*f = NULL;
while( p->next != NULL)
{
STUDENT *q = p->next,*t = p->next->next;
while(t != NULL){
if( q->ave < t->ave) q = t;
t = t->next;
}
if( p->ave < q->ave)
{
if(p == *head){
t = p->next;
p->next = q->next;
q->next = t;
*head = q;
p = q;
}else{
f->next = q;
t = p->next;
p->next = q->next;
q->next = t;
p = q;
}
}
f = p;p = p->next;
}
}
⑵ c語言鏈表冒泡排序問題
同學,給你一段代碼,裡面涵蓋了鏈表的冒泡排序!
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;/*data代表成績分數*/
struct node *next;
}LNode,*LinkList;
LinkList Creat(void)/*創建鏈表,結束標志為當輸入的數據為0!*/
{
LinkList H,p1,p2;
int n;
n=0;
p1=p2=(LinkList)malloc(sizeof(LNode));
printf("輸入數據:");
scanf("%d",&p1->data);
H=NULL;
while(p1->data!=0)
{
n=n+1;
if(n==1)
H=p1;
else
p2->next=p1;
p2=p1;
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
}
p2->next=NULL;
return(H);
}
LinkList Sort(LinkList SL)/*遞增排序函數:入口參數:鏈表的頭指針,此為鏈表中的排序函數*/
{
LinkList p,q;
int temp;
for(p=SL;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data>q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
return SL;
}
int main()
{
LinkList L,S,K;
L=Creat();
printf("初始化的單鏈表數據序列為:\n");
for(S=L;S!=NULL;S=S->next)
printf("%d ",S->data);
Sort(L);
printf("\n按遞增順序排序後的序列為:\n");
for(K=L;K!=NULL;K=K->next)
printf("%d==>",K->data);
return 0;
}
希望對你有幫助,如果有問題可以繼續找我!
⑶ c語言鏈表學生信息管理系統,使用的是冒泡排序,但是執行順序不同,結果就不同
structStudent*sort1(structStudent*head){
structStudent*p,*pt,*q;
p=(structStudent*)malloc(LEN);//臨時頭結點
p->next=head;//添加到鏈表的首部
head=p;//保存鏈表的頭結點地址
p=head;//為排序做准備
while(p->next!=NULL){
q=p->next;
while(q->next!=NULL){
if(p->next->all<q->next->all){
pt=p->next;
p->next=q->next;
q->next=p->next->next;
p->next->next=pt;
}
elseq=q->next;
}
p=p->next;
}
p=head;
head=head->next;
free(p);
p=NULL;
returnhead;
}
⑷ 求單鏈表冒泡排序程序
如果數據比指針大的多交換結點,否則交換數據,其他和數組排序差別不大!內!
注意,鏈表是雙層容的數據結構,結點內包含數據是一層,若干結點組合成一個鏈表又是 一層的數據結構,即可以把結點內的數據當作一個元素進行排序,又可以把整個結點當作一個整體進行排序!當數據本身比指針大很多時交換數據,效率比交換結點低多了!雖然文換結點,略有些麻煩也很容易解決,只要查找前一個結點即可!找一個數組排序,略加修改即可!
⑸ 單鏈表冒泡排序
你先把冒泡排序弄出來,這是必須的 冒泡排序弄成子函數 在你輸入數之後,在用一個函數判斷你的getchar()內容是y還是n,之後條件跳轉到冒泡還是直接輸出結果
⑹ 數據結構之單鏈表冒泡排序
void BubbleSort( sNode R[])
{
ElemType temp;
int i,j,flag;
for(i=0;i<n-2;i++)
{
flag=true;
for(j=i+1;j<n-2;j++)
{
if(R[j].age>R[j+1].age)
{
temp=R[j];
R[j]=r[j+1];
R[j+1]=temp;
flag=false;
}
}
if(flag) break;
}
}
⑺ 急!!求c語言單鏈表冒泡排序的詳細流程圖
#include<stdio.h> #include<malloc.h> struct number { int num; struct number *next; }; void main() { struct number *head; struct number *p1,*p2,*p,*p3,*p4; int n=0,m,i,j; p1=p2=(struct number *)malloc(sizeof(struct number)); printf("\nWang jianfei 060806110006\n\n\n"); printf("Please enter the number: \n"); scanf("%d",&p1->num); head=NULL; while(p1->num!=NULL) { n=n+1; if(head==NULL) head=p1; else p2->next=p1; p2=p1; p1=(struct number *)malloc(sizeof(struct number)); scanf("%d",&p1->num); } p2->next=NULL; p=head; for(p4=head;p4!=NULL;p4=p4->next) { for(p3=head;p3->next!=NULL;p3=p3->next) { if(p4->num>p3->num) { m=p4->num; p4->num=p3->num; p3->num=m; } } p=head; } printf("\nNow,there %d numbers are: ",n); p=head; printf("\n"); if(head!=NULL) do { printf("%5d ",p->num); p=p->next; }while(p!=NULL); printf("\n"); getch(); }
⑻ C語言鏈表冒泡排序
我這個效率要高一些,呵呵。
#include <stdio.h>
typedef struct listnode
{
int f;
struct listnode *next;
} ListNode;
ListNode *sort(ListNode *head)
{
ListNode *p,*p1,*p2,*p3;
ListNode h, t;
if (head == NULL) return NULL;
h.next=head;
p=&h;
while (p->next!=NULL)
{
p=p->next;
}
p=p->next=&t;
while (p!=h.next)
{
p3=&h;
p1=p3->next;
p2=p1->next;
while (p2!=p)
{
if ((p1->f)>(p2->f))
{
p1->next=p2->next;
p2->next=p1;
p3->next=p2;
p3=p2;
p2=p1->next;
} else {
p3=p1;
p1=p2;
p2=p2->next;
}
}
p=p1;
}
while (p->next!=&t)
{
p=p->next;
}
p->next=NULL;
return h.next;
}
int main() {
ListNode h,j,k,l;
h.next=&j;
h.f=3;
j.next=&k;
j.f=5;
k.next=&l;
k.f=1;
l.next=NULL;
l.f=7;
ListNode* p = sort(&h);
while (p != NULL) {
printf("%d ", p->f);
p=p->next;
}
printf("\n");
return 0;
}
⑼ C語言鏈表如何實現冒泡排序
兩種 思路:
1、交換鏈表中各節點的數據,不交換節點;
2、交換節點,即回節點link指針答的內容。
下面以第一種思路為例:
void sort(LinkList *L)
{
int i,j,t;
LinkList *p = L;
int count = 0;
while(p->link != NULL)
{
count++;
p = p->link;
}
for(i=0;i<count-1;i++) /* 冒泡法排序 */
{
p = L;
for(j=0;j<count-i-1;j++)
{
if(p->data > p->link->data)
{
t=p->data;
p->data = p->link->data;
p->link->data=t;
}
p = p->link;
}
}
}