C 語言 連結串列的建立與列印
阿新 • • 發佈:2019-01-06
/* 包含的標頭檔案 */
#include <stdio.h>
#include <stdlib.h>
/* 定義一個表示連結串列的結構體指標 */
struct list {
int id; /* 標識這個元素方便查詢 */
char data[20]; /* 連結串列中包含的元素 */
struct list *next; /* 指向下一個連結串列的指標 */
};
/* 定義一個連結串列頭部 */
static struct list *list_head = NULL;
/* 為了保證每一個連結串列元素的id不同,特意把id定義成一個全域性靜態變數 */
static int list_id = 0;
/** 將指定元素插入到聊表尾部
* head : 表示要插入元素的連結串列的頭部的地址
* list : 表示要插入到連結串列中的元素
*/
static void list_add(struct list **head, struct list *list)
{
struct list *temp;
/* 判斷連結串列是否為空 */
if(NULL == *head)
{
/* 為空 */
*head = list;
(*head)->next = NULL;
}
else
{
/* 不為空 */
temp = *head;
while(temp)
{
if(NULL == temp->next)
{
temp->next = list;
list ->next = NULL;
}
temp = temp->next;
}
}
}
/** 遍歷一個連結串列,列印連結串列中每個元素所包含的資料
* head : 表示要遍歷的連結串列的頭部的指標
*/
static void list_print(struct list **head)
{
struct list *temp;
temp = *head;
printf("list information :\n");
while(temp)
{
printf("\tlist %d : %s\n", temp->id, temp->data);
temp = temp->next;
}
}
/* 主函式,程式的入口 */
int main(int argc, char *argv[])
{
int i = 0;
struct list *lists = NULL;
/* 分配10個元素 */
lists = malloc(sizeof(struct list) * 10);
if(NULL == lists)
{
printf("malloc error!\n");
return -1;
}
/* 將分配的10個元素依次填充資料並加入到連結串列當中 */
for(i = 0; i < 10; i++)
{
lists[i].id = list_id++;
sprintf(lists[i].data, "TECH-PRO - %d", i);
list_add(&list_head, &lists[i]);
}
/* 遍歷連結串列,把連結串列中每個元素的資訊都打印出來 */
list_print(&list_head);
return 0;
}