c說話鏈表操作示例分享。本站提示廣大學習愛好者:(c說話鏈表操作示例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是c說話鏈表操作示例分享正文
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
/*以下是為了構建線性鏈表而界說的構造體*/
typedef struct chaink{
char c;
struct chaink * next;
}ck;
ck * chain(ck *,int);
int print(ck *,int);
/*以下是main函數*/
int main(void){
printf("這是一個線性鏈表實驗法式。\n");
ck * head=NULL;
int k;
k=sizeof(ck);
do{
head=chain(head,k);
printf("能否要停止法式?若停止,請按y/Y;按其他鍵持續錄入。\n");
if(getch()=='y' && getch()=='Y'){
printf("法式停止。\n");
getch();
break;
}
}while(1);
return 0;
}
/*以下是為了演示線性鏈表而試著編寫的法式模塊*/
ck * chain(ck * head,int k){
ck * next=NULL;/*掃描鏈表時要用到的暫時部分變量*/
ck * temp=NULL;/*拔出新結點時要用到的暫時部分變量*/
int i=0;/*近鄰print函數依附的一個參數*/
if(head==NULL){
head=(ck*)malloc(k);/*創立一個空的數據節點,第一個數據節點*/
if(head==NULL){
printf("malloc內存毛病!");
getch();
exit(1);
}/*磨練方才能否曾經勝利創立數據節點*/
printf("頭結點已勝利創立,其地址為%p。\n",head);
head->next=NULL;
head->c='0'; /*初始化頭結點*/
}
do{/*以從HEAD結點以後處拔出新數據節點的方法吸收錄入的數據*/
printf("能否要錄入新數據?若錄入,請按y/Y;按其他鍵停止錄入。\n");
if(getch()!='y' && getch()!='Y'){
printf("錄入停止。\n");
getch();
break;
}
temp=head->next;/*貯存頭節點指針域的數據*/
head->next=(ck*)malloc(k);/*創立一個新節點*/
if(head->next==NULL){
printf("malloc內存毛病!");
getch();
exit(1);
}/*磨練方才能否曾經勝利創立數據節點*/
next=head->next;/*掃描到新創立的節點*/
next->next=temp;/*給新節點的指針域賦值*/
printf("請錄入新數據……\n");
next->c=getch();/*給新節點的數據域賦值*/
if(next->c==-1){
printf("體系錄入端毛病!");
getch();
exit(1);
}
printf("新數據錄入勝利。錄入的新數據為%c,其數據節點的地址為%p。\n",next->c,next);/*反應*/
}while(1);/*以從HEAD結點以後處拔出新數據節點的方法吸收錄入的數據(停止)*/
if(head->next==NULL){/*數據打印環節*/
printf("數據鏈內外如今沒稀有據。\n");
getch();
}
else{
printf("能否要顯示鏈表中一切的數據及其地址?若要顯示,請按y/Y;按其他鍵跳過。\n");
if(getch()!='y' && getch()!='Y'){
printf("跳過。\n");
getch();
return head;
}
printf("如今輸入鏈表的內容……\n 序號 數據 指針\n");
for(next=head->next;next!=NULL;next=next->next){
i=print(next,i);/*挪用打印鏈表用的函數*/
}
}/*數據打印環節(停止)*/
return head;
}
/*以下是打印鏈表用的函數*/
int print(ck * next,int i){
printf(" %d %c %p\n",i,next->c,next);
i++;
return i;
}