概述
本文讲述了使用尾插法建立单链表,并用C语言输出整个单链表的值。第二节使用该算法用链表实现了直接插入排序
1.尾插建立单链表,C语言输出。其中L表示头结点,L->next表示第一个元素
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
typedef struct LNode {//单链表定义
int data;
struct LNode* next;
}LNode, * LinkList;
bool InitList(LinkList& L) {//初始化
L = (LNode*)malloc(sizeof(LNode));//头指针L指向无数据的头结点
if (L == NULL)//内存不足,分配失败
return false;
L->next = NULL;//头结点的next指针域设为NULL
return true;
}
LinkList List_TailInsert(LinkList& L) {//尾插法建立
LNode* s;//工作指针
LNode* r = L;//r做为表尾指针
int x, i;
cout << "单链表元素个数:";
cin >> i;//插入i个元素
cout << "请输入单链表元素:";
scanf_s("%d", &x);
while (1) {
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
i--;
if (i == 0)//输完i个,跳出
break;
scanf_s("%d", &x);
}
r->next = NULL;
return L;
}
int main() {
LinkList L;//创建单链表L
InitList(L);//初始化
List_TailInsert(L);
while (L->next) {
printf("%d ", L->next->data);
L = L->next;
}
}
运行结果
2.用链表实现直接插入排序【个人想法,非最优】
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
bool InitList(LinkList& L) {//初始化
L = (LNode*)malloc(sizeof(LNode));//头指针L指向无数据的头结点
if (L == NULL)//内存不足,分配失败
return false;
L->next = NULL;//头结点的next指针域设为NULL
return true;
}
LinkList List_TailInsert(LinkList& L) {
LNode* s;//工作指针
LNode* r = L;//r做为表尾指针
int x;
int i = 5;
scanf_s("%d", &x);
while (1) {
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
i--;
if (i == 0)
break;
scanf_s("%d", &x);
}
r->next = NULL;
return L;
}
LinkList Sort(LinkList& L) {//排序过程
if (L) {
LNode* pre = L->next, * p = L->next->next;//工作指针p,前驱pre
for (; p; p = p->next, pre = pre->next) {
LNode* pres = L, * s = L->next;//s从头遍历,找到合适位置插入;pres是s的前驱
for (; s != p; s=s->next,pres=pres->next) {
if (p->data < s->data) {
pre->next = p->next;
p->next = pres->next;
pres->next = p;
pre = p;//pre和p先往前拉一位,此处拉pre
p = pre->next->next;//p先去压S
}
}
p = pre->next;//此处拉p
}//因for循环p和pre同时后移
}
return L;
}
int main() {
LinkList L;//创建单链表L
InitList(L);//初始化
List_TailInsert(L);
Sort(L);//排序
while (L->next) {
printf("%d ", L->next->data);
L = L->next;
}
}
运行结果
最后
以上就是老实火车为你收集整理的2-4尾插建立单链表,C语言输出的全部内容,希望文章能够帮你解决2-4尾插建立单链表,C语言输出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复