链表的简单操作
来源:互联网 发布:qq免费字体软件 编辑:程序博客网 时间:2024/05/22 03:02
链表编程
一、实验目的:
1.掌握建立链表中指针的运用、插入删除节点的方法;
二、实验准备:
1.复习链表的概念;建立链表的过程;链表节点的插入与删除;
2.预习实验内容,并在预习报告上写出程序流程图(或源代码);
3.上机输入源程序,调试运行并记录运行结果;
4.将源程序存在自己的U盘上,课后按要求写实验报告。
三、实验内容:
【编写程序】:编写函数,实现以下有关链表的各项功能
1.通过输入建立一个只有6个结点的单链表,并输出该链表;
2.输入序号n,查找序号为n的结点,并输出;
4.输入值x,查找值为x的结点,并输出;
5.插入结点: 输入序号n和值x。在序号为n的结点后插入x,并输出该链表;
6.删除结点: 输入序号n,删除序号为n的结点,并输出该链表。
程序运行结果:
该链表为:21 23 25 27 29 31
输入序号:3
输出值为:25
输 入 值:29
输出序号:5
插入结点位置:3
插入结点数值:26
输出链表:21 23 25 26 27 29 31
删除结点:3
输出链表:21 23 26 27 29 31
#include<stdio.h>
struct Num{
int num;
struct Num *next;
};
struct Num *Crete_num()
{
int num;
int size=sizeof(struct Num);
struct Num *head,*tail,*p;
head=NULL;
tail=NULL;
printf("请输入链表:\n");
scanf("%d",&num);
while(num!=0)
{
p=(struct Num *) malloc(size);
p->num=num;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d",&num);
}
return head;
}
void Sort1(struct Num *head)
{
int n,temp=0;
struct Num *ptr;
printf("\n\n输入序号: ");
scanf("%d",&n);
for(ptr=head;ptr;ptr=ptr->next)
{
temp+=1;
if(temp==n)
printf("输出值为: %d \n\n",ptr->num);
}
}
void Sort2(struct Num *head)
{
int z,temp=0;
struct Num *ptr;
printf("输入值: ");
scanf("%d",&z);
temp=0;
for(ptr=head;ptr;ptr=ptr->next)
{
temp+=1;
if(ptr->num==z)
printf("输出序号: %d \n",temp);
}
}
struct Num *Insert(struct Num *head)
{
int n,temp=0;
struct Num *p,*ptr,*ptr1,*t;
p=(struct Num *) malloc(sizeof(struct Num));
printf("\n插入结点位置: ");
scanf("%d",&n);
printf("插入结点数值: ");
scanf("%d",&p->num);
if(head==NULL)
{
head=p;
head->next=NULL;
}
else
{
for(ptr=head;ptr;ptr=ptr->next)
{
temp+=1;
if(temp==n)
{
t=ptr->next;
ptr->next=p;
p->next=t;
break;
}
}
}
printf("输出链表: ");
for(ptr1=head;ptr1;ptr1=ptr1->next)
printf(" %d ",ptr1->num);
return head;
}
struct Num *Delete(struct Num *head)
{
int n,temp=0,data;
struct Num *p,*ptr,*ptr1,*ptr2,*ptr3;
printf("\n\n删除结点:");
scanf("%d",&n);
for(p=head;p;p=p->next)
{
temp+=1;
if(temp==n)
{
data=p->num ;
break;
}
}
while(head!=NULL&&head->num ==data)
{
ptr2=head;
head=head->next;
free(ptr2);
}
if(head==NULL)
return NULL;
ptr1=head;
ptr2=head->next;
while(ptr2!=NULL)
{
if(ptr2->num==data)
{
ptr1->next=ptr2->next;
free(ptr2);
}
else
ptr1=ptr2;
ptr2=ptr1->next;
}
printf("输出链表: ");
for(ptr1=head;ptr1;ptr1=ptr1->next)
printf(" %d ",ptr1->num);
printf("\n\n");
}
int main()
{
struct Num *head;
struct Num *ptr;
head=Crete_num();
printf("\n该链表为: ");
for(ptr=head;ptr;ptr=ptr->next)
printf(" %d ",ptr->num);
Sort1(head);
Sort2(head);
Insert(head);
Delete(head);
return 0;
}
- 简单链表的操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 线性表-链表的简单操作
- 一个简单的链表操作程序
- 关于链表的简单操作
- 两个简单的链表操作
- 数据结构:链表的简单操作
- C语言 链表的简单操作
- 双向链表的简单操作
- C++ 双向链表的简单操作
- 链表的定义与简单操作
- 链表中文件的简单操作
- codeforces 362B
- 我的C++命名规则
- (Relax 1.15)POJ 2773 Happy 2006(欧拉函数的应用:求与n互质的第k个数)
- google map API 在Eclipse上的配置
- 初识Ajax
- 链表的简单操作
- Cheats with ELF: Code Injecting into ELF Headers
- xhost命令
- VS使用技巧
- 图片压缩算法 3M压缩到200K
- tcp/ip中的 ip字符串转整数函数 inet_aton 源代码
- Git在项目开发中工作结构图
- Linux常用命令笔记-ftp/sed/awk
- 交叉验证