可是卻都無法正常執行(單向鏈結)
以下是我的程式碼:
#include <stdio.h>#include <stdlib.h>
/* 創造一個串列並儲存學生資料 */
struct student{
char data[10];
struct student *nextnode;
};
void title(void);
void insert(struct student *sPtr,char input[10]);
void print(struct student *currentPtr);
int main(int argc, char *argv[]) {
int choice=0;/*輸入選項*/
char value[10];
struct student *headPtr = NULL;
title();/*顯示標頭*/
printf("<提示>輸入1以輸入學生資料,輸入2以顯示學生資料,3為結束\n");
scanf("%d",&choice);
while(choice!=3){
switch (choice){
/*輸入1時為輸入學生資料*/
case 1:
printf("請輸入學號:");
scanf("\n%10s",value);
printf("head 原本指向 %p\n",headPtr);
insert(&headPtr,value);
printf("head insert後指向 %p\n",headPtr);
break;
/*輸入2時顯示學生資料*/
case 2:
system("cls");
title();
printf(" 學號\n");
printf("====================================\n");
print(headPtr);
break;
default:
printf("\n輸入錯誤!!");
break;
}
}
printf("====================================\n");
printf(" 程 式 執 行 結 束 \n");
printf("====================================\n");
return 0;
}
void title(void){
printf(" 學生資料管理系統\n");
printf("====================================\n");
}
void insert(struct student *sPtr,char input[10]){
struct student *newPtr;
struct student *lastPtr;
newPtr = (struct student *)malloc(sizeof(struct student));
sPtr->nextnode = NULL;
if(newPtr != NULL){
*newPtr->data = input;
newPtr->nextnode = NULL;
lastPtr = NULL;
if(sPtr->nextnode == NULL){/*第一筆資料*/
sPtr->nextnode = newPtr;
newPtr = sPtr;
}
else{/*第一筆以後*/
newPtr->nextnode = lastPtr;
lastPtr = newPtr;
sPtr->nextnode = newPtr;
newPtr = sPtr;
}
printf("newPtr 指向 %p\n",newPtr);
printf("head 傳入insert指向 %p\n",sPtr);
}
else{
printf("\n記憶體取得失敗!!");
}
}
更新1:
void print(struct student *currentPtr){ if(currentPtr == NULL){ printf("\n無資料"); } else{ while(currentPtr != NULL){ printf("%s\n",currentPtr->data); currentPtr = currentPtr->nextnode; } } }
更新2:
關於上述的程式碼 Q1 執行後選1 會看到headPtr執行完insert後記憶體位置依舊沒變 Q2 insert中的判斷是否為第一筆資料請問寫法是否正確 Q3 請問一下如果第一筆資料為1,第二筆為2,第三筆為3 資料鏈結狀態是否為我的描述這樣? 第一次輸入 headPtr->newPtr(data = 1,nextnode = NULL) 第二次輸入 headPtr->newPtr(data = 2,nextnode = lastPtr)->lastPtr(data = 1,nextnode = NULL)
更新3:
第三次輸入 headPtr->newPtr(data = 3,nextnode = lastPtr)->lastPtr(data=2,nextnode = 第一筆資料)->第一筆(data = 1 , nextnode = NULL)