有关单链表的各种操作
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(q->data <= p->data )
{
r->next = q ;
q->next = p ;
break;
}
}
if(p->next == NULL && q->next == NULL)
p->next = q;
}
//用插入法建立非递减链表
List CreateList1(List L){
for(int i = 0; i<5; i++)
q->next =NULL ;
p = L->next ;
while(p != NULL)
{
L->next = p->next ;
p->next = q ;
q = p ;
p = L->next ;
}
L->next = q;
}
else
{
printf("此链表为空。");
}
return L;
}
//删去偶数结点
t->next = p->next ;
p->next = NULL;
while(q->next != NULL)
{
r = q;
q = q->next ;
if(p->data <= q->data )
{
r->next = p ;
p->next = q ;
break;
}
}
if( q->next == NULL && p->next == NULL)
inverse(n);
view(n);
}
view(L);
inverse(L);
//3.逆置带头结点的单链表
printf("\n逆置后的单链表:");
view(L);
//4.删除偶数元素
remove(L);
printf("\n删除偶数元素后:");
view(L);
//5.插入元素后仍然有序
insert(L);
printf("插入元素后的链表:");
view(L);
// 7.利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。
List x, y;
x = (List)malloc(sizeof(LNode));
x->next = NULL;
y = (List)malloc(sizeof(LNode));
y->next = NULL;
printf("创建非递减链表1,");
#include "stdio.h"
#include "stdlib.h"
#define N 5
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *List;
List CreateList(List L){
List p;
L = (List)malloc(sizeof(LNode));
view(y);
// 6.利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。
List m, n;
m = (List)malloc(sizeof(LNode));
m->next = NULL;
n = (List)malloc(sizeof(LNode));
n->next = NULL;
printf("创建非递减链表1,");
List q, p, r;
p = L;
q = (List)malloc(sizeof(LNode));
q->next = NULL;
printf("请输入你要插入的元素:");
scanf("%d", &(q->data));
while(p->next != NULL)
{
r = p;
p = p->next ;
{r->next = p;
printf("h");
}
q = p;
//view(y);
}
}
void main(){
List L;
//1.创建带头结点的单链表
printf("创建带头结点的单链表:\n");
L = CreateList(L);
//2.遍历带头结点的单链表
printf("遍历单链表:");
CreateList1(x);
printf("\n创建的单链表1如下:");
view(x);
printf("\n创建非递减链表2,");
CreateList1(y);
printf("创建的单链表2如下:");
view(y);
printf("\n将上述两非递减链表,合并成一个非递减链表:");
IncreaseCombine(x, y);
L->next = NULL;
for(int i = 0; i<N; i++)
{
p = (List)malloc(sizeof(LNode));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
return L;
}
//遍历单链表
void view(List L){
CreateList1(m);
printf("\n创建的单链表1如下:");
view(m);
printf("\n创建非递减链表2,");
CreateList1(n);
printf("创建的单链表2如下:");
view(n);
printf("\n将上述两非递减链表,合并成一个非递减链表:");
IncreaseCombine(m, n);
void remove(List L){
List p, q;
p = L;
while(p->next != NULL)
{
q = p;
p = p->next;
if((p->data) % 2 == 0)
{
q->next = p->next;
free(p);
p = q;
}Biblioteka Baidu
}
}
//插入一个元素后仍然有序
void insert(List L){
{
insert(L);
}
return L;
}
//合并两非递减的链表成为一个非递减链表(把x插入y中)
void IncreaseCombine(List x, List y){
List t, p, q, r;
t = x;
q = y;
while(t->next != NULL){
//从x中挑选p
p = t->next;
List p;
p = L;
while(p->next != NULL)
{
p = p->next;
printf("%d ", p->data );
}
}
//逆置单链表
List inverse(List L){
List p, q;
if(L->next != NULL)
{
q = L->next ;
L->next = q->next ;
{
r->next = q ;
q->next = p ;
break;
}
}
if(p->next == NULL && q->next == NULL)
p->next = q;
}
//用插入法建立非递减链表
List CreateList1(List L){
for(int i = 0; i<5; i++)
q->next =NULL ;
p = L->next ;
while(p != NULL)
{
L->next = p->next ;
p->next = q ;
q = p ;
p = L->next ;
}
L->next = q;
}
else
{
printf("此链表为空。");
}
return L;
}
//删去偶数结点
t->next = p->next ;
p->next = NULL;
while(q->next != NULL)
{
r = q;
q = q->next ;
if(p->data <= q->data )
{
r->next = p ;
p->next = q ;
break;
}
}
if( q->next == NULL && p->next == NULL)
inverse(n);
view(n);
}
view(L);
inverse(L);
//3.逆置带头结点的单链表
printf("\n逆置后的单链表:");
view(L);
//4.删除偶数元素
remove(L);
printf("\n删除偶数元素后:");
view(L);
//5.插入元素后仍然有序
insert(L);
printf("插入元素后的链表:");
view(L);
// 7.利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。
List x, y;
x = (List)malloc(sizeof(LNode));
x->next = NULL;
y = (List)malloc(sizeof(LNode));
y->next = NULL;
printf("创建非递减链表1,");
#include "stdio.h"
#include "stdlib.h"
#define N 5
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *List;
List CreateList(List L){
List p;
L = (List)malloc(sizeof(LNode));
view(y);
// 6.利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。
List m, n;
m = (List)malloc(sizeof(LNode));
m->next = NULL;
n = (List)malloc(sizeof(LNode));
n->next = NULL;
printf("创建非递减链表1,");
List q, p, r;
p = L;
q = (List)malloc(sizeof(LNode));
q->next = NULL;
printf("请输入你要插入的元素:");
scanf("%d", &(q->data));
while(p->next != NULL)
{
r = p;
p = p->next ;
{r->next = p;
printf("h");
}
q = p;
//view(y);
}
}
void main(){
List L;
//1.创建带头结点的单链表
printf("创建带头结点的单链表:\n");
L = CreateList(L);
//2.遍历带头结点的单链表
printf("遍历单链表:");
CreateList1(x);
printf("\n创建的单链表1如下:");
view(x);
printf("\n创建非递减链表2,");
CreateList1(y);
printf("创建的单链表2如下:");
view(y);
printf("\n将上述两非递减链表,合并成一个非递减链表:");
IncreaseCombine(x, y);
L->next = NULL;
for(int i = 0; i<N; i++)
{
p = (List)malloc(sizeof(LNode));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
return L;
}
//遍历单链表
void view(List L){
CreateList1(m);
printf("\n创建的单链表1如下:");
view(m);
printf("\n创建非递减链表2,");
CreateList1(n);
printf("创建的单链表2如下:");
view(n);
printf("\n将上述两非递减链表,合并成一个非递减链表:");
IncreaseCombine(m, n);
void remove(List L){
List p, q;
p = L;
while(p->next != NULL)
{
q = p;
p = p->next;
if((p->data) % 2 == 0)
{
q->next = p->next;
free(p);
p = q;
}Biblioteka Baidu
}
}
//插入一个元素后仍然有序
void insert(List L){
{
insert(L);
}
return L;
}
//合并两非递减的链表成为一个非递减链表(把x插入y中)
void IncreaseCombine(List x, List y){
List t, p, q, r;
t = x;
q = y;
while(t->next != NULL){
//从x中挑选p
p = t->next;
List p;
p = L;
while(p->next != NULL)
{
p = p->next;
printf("%d ", p->data );
}
}
//逆置单链表
List inverse(List L){
List p, q;
if(L->next != NULL)
{
q = L->next ;
L->next = q->next ;