c語言鏈表操作示例分享
更新時(shí)間:2014年03月06日 10:17:20 作者:
這篇文章主要介紹了c語言鏈表操作示例,代碼中有注釋,需要的朋友可以參考下
復(fù)制代碼 代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
/*以下是為了構(gòu)建線性鏈表而定義的結(jié)構(gòu)體*/
typedef struct chaink{
char c;
struct chaink * next;
}ck;
ck * chain(ck *,int);
int print(ck *,int);
/*以下是main函數(shù)*/
int main(void){
printf("這是一個(gè)線性鏈表試驗(yàn)程序。\n");
ck * head=NULL;
int k;
k=sizeof(ck);
do{
head=chain(head,k);
printf("是否要結(jié)束程序?若結(jié)束,請按y/Y;按其他鍵繼續(xù)錄入。\n");
if(getch()=='y' && getch()=='Y'){
printf("程序結(jié)束。\n");
getch();
break;
}
}while(1);
return 0;
}
/*以下是為了演示線性鏈表而試著編寫的程序模塊*/
ck * chain(ck * head,int k){
ck * next=NULL;/*掃描鏈表時(shí)要用到的臨時(shí)局部變量*/
ck * temp=NULL;/*插入新結(jié)點(diǎn)時(shí)要用到的臨時(shí)局部變量*/
int i=0;/*隔壁print函數(shù)依賴的一個(gè)參數(shù)*/
if(head==NULL){
head=(ck*)malloc(k);/*創(chuàng)建一個(gè)空的數(shù)據(jù)節(jié)點(diǎn),第一個(gè)數(shù)據(jù)節(jié)點(diǎn)*/
if(head==NULL){
printf("malloc內(nèi)存錯(cuò)誤!");
getch();
exit(1);
}/*檢驗(yàn)剛剛是否已經(jīng)成功創(chuàng)建數(shù)據(jù)節(jié)點(diǎn)*/
printf("頭結(jié)點(diǎn)已成功創(chuàng)建,其地址為%p。\n",head);
head->next=NULL;
head->c='0'; /*初始化頭結(jié)點(diǎn)*/
}
do{/*以從HEAD結(jié)點(diǎn)之后處插入新數(shù)據(jù)節(jié)點(diǎn)的方式接收錄入的數(shù)據(jù)*/
printf("是否要錄入新數(shù)據(jù)?若錄入,請按y/Y;按其他鍵結(jié)束錄入。\n");
if(getch()!='y' && getch()!='Y'){
printf("錄入結(jié)束。\n");
getch();
break;
}
temp=head->next;/*儲(chǔ)存頭節(jié)點(diǎn)指針域的數(shù)據(jù)*/
head->next=(ck*)malloc(k);/*創(chuàng)建一個(gè)新節(jié)點(diǎn)*/
if(head->next==NULL){
printf("malloc內(nèi)存錯(cuò)誤!");
getch();
exit(1);
}/*檢驗(yàn)剛剛是否已經(jīng)成功創(chuàng)建數(shù)據(jù)節(jié)點(diǎn)*/
next=head->next;/*掃描到新創(chuàng)建的節(jié)點(diǎn)*/
next->next=temp;/*給新節(jié)點(diǎn)的指針域賦值*/
printf("請錄入新數(shù)據(jù)……\n");
next->c=getch();/*給新節(jié)點(diǎn)的數(shù)據(jù)域賦值*/
if(next->c==-1){
printf("系統(tǒng)錄入端錯(cuò)誤!");
getch();
exit(1);
}
printf("新數(shù)據(jù)錄入成功。錄入的新數(shù)據(jù)為%c,其數(shù)據(jù)節(jié)點(diǎn)的地址為%p。\n",next->c,next);/*反饋*/
}while(1);/*以從HEAD結(jié)點(diǎn)之后處插入新數(shù)據(jù)節(jié)點(diǎn)的方式接收錄入的數(shù)據(jù)(結(jié)束)*/
if(head->next==NULL){/*數(shù)據(jù)打印環(huán)節(jié)*/
printf("數(shù)據(jù)鏈表里現(xiàn)在沒有數(shù)據(jù)。\n");
getch();
}
else{
printf("是否要顯示鏈表中所有的數(shù)據(jù)及其地址?若要顯示,請按y/Y;按其他鍵跳過。\n");
if(getch()!='y' && getch()!='Y'){
printf("跳過。\n");
getch();
return head;
}
printf("現(xiàn)在輸出鏈表的內(nèi)容……\n 序號(hào) 數(shù)據(jù) 指針\n");
for(next=head->next;next!=NULL;next=next->next){
i=print(next,i);/*調(diào)用打印鏈表用的函數(shù)*/
}
}/*數(shù)據(jù)打印環(huán)節(jié)(結(jié)束)*/
return head;
}
/*以下是打印鏈表用的函數(shù)*/
int print(ck * next,int i){
printf(" %d %c %p\n",i,next->c,next);
i++;
return i;
}
您可能感興趣的文章:
- C語言創(chuàng)建鏈表錯(cuò)誤之通過指針參數(shù)申請動(dòng)態(tài)內(nèi)存實(shí)例分析
- C語言實(shí)現(xiàn)帶頭結(jié)點(diǎn)的鏈表的創(chuàng)建、查找、插入、刪除操作
- C語言實(shí)現(xiàn)單鏈表逆序與逆序輸出實(shí)例
- C語言雙向鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
- C語言單循環(huán)鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
- C語言單向鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
- C語言單鏈表常見操作匯總
- c語言實(shí)現(xiàn)單鏈表算法示例分享
- c語言鏈表基本操作(帶有創(chuàng)建鏈表 刪除 打印 插入)
- C語言實(shí)現(xiàn)靜態(tài)鏈表的方法
- C語言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)
相關(guān)文章
c++獲取進(jìn)程信息列表和進(jìn)程所調(diào)用的dll列表
這篇文章主要介紹了c++獲取進(jìn)程信息列表和進(jìn)程所調(diào)用的dll列表,大家參考使用吧2013-11-11