7.5_連結串列_新增元素_尾插法/頭插法
阿新 • • 發佈:2020-11-28
尾插法:
頭插法:
#include <stdio.h> #include <stdlib.h> //尾插法 & 頭插法 //用陣列中的元素填充結點資料域 //結點 struct linkNode{ int data; struct linkNode *next; }; void output(struct linkNode *head); //列印連結串列資料域 struct linkNode *creat_link_list_rear(int *a, int n); //尾插法 struct linkNode *creat_link_list_head(int*a, int n); //頭插法 int main() { int a[6]; //存放結點資料 struct linkNode *head_rear; //頭指標(尾插法) struct linkNode *head_head; //頭指標(頭插法) printf("輸入陣列各元素的值【6個】:\n"); for(int i=0; i<6; i++){ scanf("%d", &a[i]); } //尾插法 head_rear = creat_link_list_rear(a, 6); printf("此連結串列各個節點的資料為:\n"); output(head_rear); //頭插法 head_head = creat_link_list_head(a, 6); printf("此連結串列各個節點的資料為:\n"); output(head_head); return 0; } //尾插法 struct linkNode *creat_link_list_rear(int a[], int n){ struct linkNode *h = NULL; //新建連結串列h,將每個結點依次插入到鏈尾,將連結串列的頭指標返回 structlinkNode *s; //s指向要插入的結點 struct linkNode *r; //r指向連結串列尾結點 for(int i=0; i<n; i++){ s = (struct linkNode *)malloc(sizeof(struct linkNode)); s->data = a[i]; s->next = NULL; if(h == NULL){ h = s; }else{ r->next = s; } r = s; //r指向當前連結串列的尾結點 } return h; //返回連結串列頭指標 } //頭插法 struct linkNode *creat_link_list_head(int a[], int n){ struct linkNode *h = NULL; struct linkNode *s; //s指向要插入的結點 for(int i=5; i>=0; i--){ s = (struct linkNode *)malloc(sizeof(struct linkNode)); s->data = a[i]; if(h == NULL){ h = s; }else{ s->next = h; h = s; } } return h; } //列印連結串列資料 void output(struct linkNode *head){ struct linkNode *p = head; while (p){ printf("%d ", p->data); p = p->next; } printf("\n"); }