zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言单链表头节点式,头指针式建立链表。头插法尾插法

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;
}