經過近3年,我開始重新學習C
。創建排序的鏈接列表
我創建了一個Linked list
,並且希望將其擴展爲創建排序鏈接列表。這裏是我的代碼:
typedef struct node{
int data;
struct node *ptr;
}node;
node* insert(node* head, int num){
node *temp,*prev,*next;
temp = (node*)malloc(sizeof(node));
temp->data = num;
temp->ptr = '\0';
if(head=='\0'){
head=temp;
}else{
next = head;
prev = next;
while(next->data<=num){
prev = next;
next = next->ptr;
}
if(next==NULL){
prev->ptr = temp;
}else{
temp->ptr = prev->ptr;
prev-> ptr = temp;
}
}
return head;
}
void main(){
int num;
node *head, *p;
head = '\0';
do{
printf("Enter a number");
scanf("%d",&num);
if(num!=0)
head = insert(head,num);
}while(num!=0);
p = head;
printf("\nThe numbers are:\n");
while(p!='\0'){
printf("%d ",p->data);
p = p->ptr;
}
}
這是我的想法。我遍歷列表,直到找到一個數字>=
爲止。我將前一個節點存儲在prev
和next
節點中包含當前值。如果接下來是null
,那麼列表結束並且列表中的數字是最高的,因此它將被插入到最後的位置,如果該數字是中間的某個位置,則prev節點的地址部分被存儲在臨時節點中地址部分現在臨時節點指針保存下一個節點的地址。
編輯:我的代碼問題是如果我輸入1,2我得到錯誤信息爲a.exe has stopped working
。我正在使用MinGW進行編譯。我打破了循環時,用戶輸入0
''\ 0''與NULL不相同。 http://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0 – mohit
@mohit,''\ 0''將和'NULL'完全一樣。它在語義上並不真正有意義,但它應該沒問題。 –