从键盘读入n个整数(升序),请编写算法实现: 建立带表头结点的单链表; 显示单链表,(形如:H->10->20->30->40); 在有序单链表中插入新的数据元素x; 将单链表就地逆
来源:互联网 发布:英伟达驱动游戏优化 编辑:程序博客网 时间:2024/06/05 11:53
#include <stdio.h> #include <stdlib.h>
#include <malloc.h>
typedef struct node //定义结点
{
int data;
struct node *next;
}LNode;
void print(LNode *h); //打印函数
void insert(LNode *h); //插入函数
void change(LNode *h); //逆置函数
LNode *create(); //创建函数
void hebing(LNode *h,LNode *m,LNode *c); //合并函数
int main(){
LNode *h,*m,*c;
int i;
printf("**********************************\n"); //主菜单
printf(" 请选择要进入的系统\n");
printf(" 1.创建一个单链表\n");
printf(" 2.打印单链表\n");
printf(" 3.插入一个数据\n");
printf(" 4.将单链表逆置\n");
printf(" 5.两个升序单链表合并\n");
printf(" 6.退出系统\n");
printf("\n");
while(1){
scanf("%d",&i);
switch(i){ //选择菜单
case 1:
h=create();break;
case 2:
print(h);break;
case 3:
insert(h);break;
case 4:
change(h);break;
case 5:
m=create();
hebing(h,m,c);
break;
case 6: return 0;
}
printf("**********************************\n");
printf(" 请选择要进入的系统\n");
printf(" 1.创建一个单链表\n");
printf(" 2.打印单链表\n");
printf(" 3.插入一个数据\n");
printf(" 4.将单链表逆置\n");
printf(" 5.两个升序单链表合并\n");
printf(" 6.退出系统\n");
printf("\n");
}
fflush(stdin);
}
void print(LNode *h){ //打印函数,定义r为头结点之后的结点,遍历单链表输出
LNode *r;
printf("\n");
printf("输出链表内容为:\n");
printf("\n");
r=h->next;
while(r!=NULL){
printf("%d\t",r->data);
r=r->next;
}
printf("\n");
}
void insert(LNode *h){ //插入函数
LNode *p,*q,*s;
int x;
printf("\n");
printf("输入插入的数x的值为:\n");
printf("\n");
scanf("%d",&x);
s=(LNode*)malloc(sizeof(LNode));
p=h->next;
q=h;
s->data=x;
while(p!=NULL&&p->data<=x){
q=p;
p=p->next;
}
if(p&&(p->data>=x)){
s->next=p;
q->next=s;
}
else{
s->next=NULL;
q->next=s;
}
return;
}
void change(LNode *h){ //逆置函数
LNode *p,*q;
if(h->next==NULL)return;
if((h->next)->next==NULL)return;
p=(h->next)->next;
(h->next)->next=NULL;
while(p!=NULL){
q=p;
p=p->next;
q->next=h->next;
h->next=q;
}
}
LNode *create(){ //创建链表函数
int n;
LNode *head,*p,*q;
head=(LNode*)malloc(sizeof(LNode));
q=head;
printf("\n");
printf("输入元素个数:\n");
scanf("%d",&n);
printf("\n");
if(n>0){
printf("请输入数字:\n");
printf("\n");
while(n>0) {
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=p;
n--;
}
}
q->next=NULL;
return(head);
}
void hebing(LNode *h,LNode *m,LNode *c) //合并逆序函数
{
LNode *pa,*pb,*s;
pa=h->next;
if(pa->data>pa->next->data)
change(h);
pa=h->next;
pb=m->next;
c=h;
c->next=NULL;
free(m);
while(pa!=NULL&&pb!=NULL)
{
if(pa->data<pb->data)
{
s=pa;
pa=pa->next;
}
else
{
s=pb;
pb=pb->next;
}
s->next=c->next;
c->next=s;
}
if(pa==NULL)
pa=pb;
while(pa!=NULL)
{
s=pa;
pa=pa->next;
s->next=c->next;
c->next=s;
}
print(h);
return;
}
0 0
- 从键盘读入n个整数(升序),请编写算法实现: 建立带表头结点的单链表; 显示单链表,(形如:H->10->20->30->40); 在有序单链表中插入新的数据元素x; 将单链表就地逆
- 链表中插入数据元素x保持原有升序保持不变 / 就地逆置的实现(C)
- 编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
- 在表头插入新的结点
- K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表头文件C语言
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 数据结构 P38 算法实现 在带头结点的单链表的第i个元素插入元素e
- 带头结点的单链表就地逆置(10 分)
- 一个含n个元素的整数数组至少存在一个重复数, 请编程实现,在O(n)时间内找出其中任意一个重复数。
- PTA(数据结构)-带头结点的单链表就地逆置
- 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件
- 对带头结点的单链表实现就地逆置的算法分析
- K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表实现文件C语言
- 在非递减的有序单链表中插入一个值为x的数据元素,并使单链表仍保持有序的操作
- 第十八周项目一(6):将值为x的结点插入到建立起来的有序链表中
- 带头结点的单链表就地逆置
- 带头结点单链表的就地逆置
- 就地逆置带头结点的单链表
- 多态经典面试题解析
- 杭电1012
- 剑指offer 66 机器人的运动范围
- SpringMvc 上传excel(注解和非注解两种方式)
- Vim插件
- 从键盘读入n个整数(升序),请编写算法实现: 建立带表头结点的单链表; 显示单链表,(形如:H->10->20->30->40); 在有序单链表中插入新的数据元素x; 将单链表就地逆
- Hibernate框架ORM的实现原理
- Laravel 5.2使用phpunit提示command not found
- 顺序容器 list
- ViewPager每页包含多个item
- 自定义的onMeasure()方法
- Qt之文件操作
- Storm数据流模型的分析及讨论
- android事件分发