帶頭結點的鍊錶和不帶頭結點的鍊錶主要不同點在插入和刪除操作上。同時要注意,帶頭結點的鍊錶初始化操作時建立頭結點。
下面我們來看一下**中的異同:
#include#include#includetypedef int elemtype;
typedef struct nodenode;
int insertlast(node** pnode, elemtype ele);
//1、初始化鍊錶,未帶頭結點
void init(node** pnode)
void init_n(node** pnode)
printf("------>鍊錶初始化
(*pnode)->next = null;
}//1、建立鍊錶
node* create(node* phead)
memset(p1, 0, sizeof(node));
printf("輸入節點值(非正數結束):");
scanf_s("%d", &p1->element);//輸入新節點
p1->next = null;
while (p1->element > 0)
else
p2 = p1;//重新讓p2做尾節點
p1 = (node*)malloc(sizeof(node));
if (p1 == null || p2 == null)
memset(p1, 0, sizeof(node));
printf("輸入節點值(非正數結束):");
scanf_s("%d", &p1->element);
p1->next = null;
} printf("鍊錶建立成功\n");
return phead;
}node* create_n(node* phead)
memset(p1, 0, sizeof(node));
printf("輸入節點值(非正數結束):");
scanf_s("%d", &p1->element);//輸入新節點
p1->next = null;
while (p1->element > 0)
printf("鍊錶建立成功\n");
return phead;
}//列印鍊錶,不帶頭結點的情況
void print(node* phead)
else
printf("\n"); }}
//列印鍊錶,帶頭結點的情況
void print_n(node* phead)
else
printf("\n"); }}
//插入尾節點
int insertlast(node** pnode, elemtype ele)
phead->next = pinsert;
*pnode = ptmp;
printf("向表尾插入元素:%d\n",ele);
return 1;
}void main()
執行結果:
總結:不帶頭結點的單鏈表對於第乙個元素結點的操作和其他結點的操作不一致,需要單獨處理,容易造成錯誤。
帶頭結點的鍊錶與不帶頭結點的鍊錶,在初始化、刪除、遍歷輸出操作不同(這裡我們沒有演示刪除操作)。
資料結構 單鏈表 帶頭結點和不帶頭結點
1 單鏈表 通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢 2 只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插 4 5 6 單鏈表的結構定義 7 typedef int datatype 8 typedef struct node 9 linknode...
資料結構 佇列 不帶頭結點
佇列 鏈式儲存結構 include include define error 1 define ok 0 typedef int elemtype typedef struct node node typedef struct linkqueue linkqueue int inqueue link...
資料結構篇 單鏈表倒置(帶頭結點 不帶頭結點)
初始化如圖 1.我們需要把1這個結點作為最後乙個結點,所以要把1的next指向null 2.然後我們要新建結點,指向headnext的下一位,並把headnext的下一位指向headpre,3.headpre指向headnext為下一次迴圈做準備 headpre headnext 4.如果tempn...