C语言单链表头节点式,头指针式建立链表。头插法尾插法
2023-09-27 14:23:44 时间
头节点第一个节点就有数据,头指针法第一个没有数据,但头指针法有一个优点,在删除数据时,如果是第一个元素要被删除或者要插入第一个元素,那么有头指针的话就能直接删除第一个元素,很方便。
带头指针:
LinkList HeadInsert(LinkList& L) {
Node* s;
int x;
L = (LinkList)malloc(sizeof(struct Node);
L->next = NULL; //此步骤必须有
LinkList head = (LinkList)malloc(sizeof(struct Node);
head->next = L;
scanf("%d", &x);
while (x != 9999) { //输入9999代表结束
s = (Node*)malloc(sizeof(struct Node)); //创建新节点
s->data = x;
s->next = L->next;
L->next = s;
scanf("%d", &x);
}
return head;
}
带头节点和头插法相同
单链表的建立
1.尾插法建立单链表
LinkList TailInsert(LinkList& L) {
int x;
L = (LinkList)malloc(sizeof(struct Node));
Node* s, * r = L;
scanf("%d", &x);
while (x != 9999) { //等于9999时停止
s = (Node*)malloc(sizeof(struct Node));
s->data = x;
r->next = s;
r = s;
scanf("%d", &x);
}
r->next = NULL;
return L;
}
2.头插法建立单链表
LinkList HeadInsert(LinkList& L) {
Node* s;
int x;
L = (LinkList)malloc(sizeof(struct Node));
L->next = NULL; //此步骤必须有
scanf("%d", &x);
while (x != 9999) { //输入9999代表结束
s = (Node*)malloc(sizeof(struct Node)); //创建新节点
s->data = x;
s->next = L->next;
L->next = s;
scanf("%d", &x);
}
return L;
}
链表的更多操作见:https://blog.csdn.net/qq_59183443/article/details/126039963
算法2-52.2.3 顺序表应用举例_星河边采花的博客-CSDN博客
算法2-6顺序表的合并:
就是一种合并的思想,按从小到大,遍历两个顺序表,谁小就把谁放入新顺序表。
void merge(SeqList* A, SeqList* B, SeqList* C){
int i, j, k;
i = 0; j = 0; k = 0;
while (i <= A->last && j <= B->last)
if (A->data[i] < B->data[j])
C->data[k++] = A->data[i++];
else C->data[k++] = B->data[j++];
while (i <= A->last)
C->data[k++] = A->data[i++];
while (j <= B->last)
C->data[k++] = B->data[j++];
C->last = k - 1;
}