/*單鏈表的練習-頭插法*/
/*單鏈表由頭結點就可以唯一確定*/
#include?<malloc.h>
#include?<stdio.h>
#include?<stdlib.h>
//定義單鏈表結構
typedef?struct?Node{
int?data;??//數據域
Node?*?pNext;??//指針域
}NODE,*?PNODE;
PNODE?create_list(void);??//創建鏈表
void?show_list(PNODE?pHead);??//顯示鏈表
void?insert(PNODE?pHead,int?pos,int?inval);?//向鏈表中某個位置插入元素
int?deleteList(PNODE?pHead,int?pos);?//刪除鏈表某個位置上的值
void?find(PNODE?pHead,int?fval);??//在鏈表中查找某個元素
void?main(){
PNODE?pHead?=?NULL;??//定義一個頭結點,初始值為空
pHead?=?create_list();
show_list(pHead);
insert(pHead,2,100);
show_list(pHead);
find(pHead,3);
printf("你所刪除的值是%d\n",deleteList(pHead,2));
show_list(pHead);
}
PNODE?create_list(void){
int?length,val;
PNODE?pHead?=?(PNODE)malloc(sizeof(NODE));??//向內存申請頭節點空間
pHead->pNext=NULL;???//開始的時候只有頭結點自身,沒有其它結點
if(NULL?==?pHead){
printf("分配失敗,程序終止");
exit(-1);
}
printf("請輸入需要生成的單鏈表的長度:");
scanf("%d",&length);
for(int?i=0;i<length;i++){????//for循環生成指定個數的結點
printf("請輸入第%d個節點的值:?",i+1);
scanf("%d",&val);
PNODE?pNew?=?(PNODE)malloc(sizeof(NODE));
if(NULL?==?pNew){
printf("分配失敗,程序終止");
exit(-1);
}
pNew->data=val;???//給新申請的結點數據域賦值
pNew->pNext=pHead->pNext;??//頭指針指向的下一個結點的地址賦給了新結點的指針域,也就是在當前頭結點后面直接插入一個新結點
pHead->pNext=pNew;?//頭結點指向了新的結點
}
return?pHead;???//函數返回頭結點的地址
}
void?show_list(PNODE?pHead){
printf("單鏈表的值如下:\n");
PNODE?P?=?pHead->pNext;
while(P?!=?NULL){??????//while巡檢打印出所以結點,直到下個結點不存在
printf("%d?",P->data);
P=P->pNext;
}
printf("\n");
}
void?insert(PNODE?pHead,int?pos,int?inval){
PNODE?P?=?pHead;
int?j=0;
while(P?!=?NULL?&&?j<pos-1){???//如果結點不為空,把P指針移動到插入位置的前一個結點位置
P?=?P->pNext;
j++;
}
if(P?==?NULL){
printf("插入失敗\n");
exit(-1);
}else{
PNODE?pNew?=?(PNODE)malloc(sizeof(NODE));??//申請新的結點
pNew->data=inval;???//將要插入的值賦值給新結點的數據域
pNew->pNext=P->pNext;??//新結點指向P指針指向的下一個結點
P->pNext=pNew;?//P指針所在的結點指向新結點
printf("你已經成功的插入了元素%d到鏈表中.\n",inval);
}
}
int?deleteList(PNODE?pHead,int?pos){
PNODE?P?=?pHead,S;
int?j=0,x;
if(P?!=?NULL?&&?j<pos-1){
P?=?P->pNext;
j++;
}
if(P?==?NULL){
printf("刪除失敗,數組是空的");
exit(-1);
}else{
S?=?P->pNext;
P->pNext?=?S->pNext;
x?=?S->data;
free(S);
return?x;
}
}
void?find(PNODE?pHead,int?fval){
PNODE?P?=?pHead;
int?cnt=0;
if(P?==?NULL){
printf("不用找了,鏈表是空的\n");
exit(-1);
}
while(P?!=?NULL){
P?=?P->pNext;
++cnt;
if(P->data==fval){
printf("你要找的數%d在鏈表中,它在鏈表的第%d個位置\n",fval,cnt);
break;
}
}
}結果截圖

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。