链表的创建,删除,插入小型程序。
来源:互联网 发布:stata面板数据ols回归 编辑:程序博客网 时间:2024/06/04 17:49
#include<stdio.h>
#include<malloc.h>
struct list
{
int data;
struct list *next;
};
typedef struct list node;
typedef struct list *link;
link head,p,q;
//====================================
//创建链表
//====================================
void create(int n)
{
int i=1;
head=(link)malloc(sizeof(node));
printf("请输入第%d个数的大小:\n",i);
scanf("%d",&head->data);
q=head;
head->next=NULL;
for(i=2;i<=n;i++)
{
p=(link)malloc(sizeof(node));
printf("请输入第%d个数的大小:\n",i);
scanf("%d",&p->data);
q->next=p;
q=p;
}
q->next=NULL;
}
//====================================
//在x元素前插入数据元素y
//====================================
void insert(int x,int y)
{
link New;
New=(link)malloc(sizeof(node));
New->data=y;
p=head;
q=p->next;
if(head->data==x)
{
New->next=head;
head=New;
}
else
{
while((q->data!=x)&&(p->next!=NULL))
{
p=q;
q=q->next;
}
if(q->data==x)
{
p->next=New;
New->next=q;
}
else
printf("不存在%d这个数据!",x);
}
}
//====================================
//打印函数
//====================================
void print()
{
q=head;
while(q!=NULL)
{
printf("%d\t",q->data);
q=q->next;
}
printf("\n");
}
//====================================
//删除函数
//====================================
void Delete(int x)
{
p=head;
q=p->next;
if(head->data==x)
head=head->next;
else
{
while(p->next!=NULL)
{
if(q->data==x)
p->next=q->next;
p=q;
q=q->next;
}
}
}
//==================================
//主函数
//==================================
void main()
{
int n,m,x,y,z,size;
char A;
do{
printf("\n========================================\n");
printf("1.创建链表\n");
printf("2.在x元素前插入数据元素y\n");
printf("3.删除函数\n");
printf("4.退出\n");
printf("\n========================================\n");
printf("请输入你要选择的选项:");
scanf("%d",&size);
switch(size)
{
case 1:
{
printf("请输入链表元素的个数:");
scanf("%d",&n);
create(n);
print();
printf("\n");
break;
}
case 2:
{
printf("请分别输入你要插入的数据及插入在那个数据之前:");
scanf("%d%d",&x,&y);
insert(x,y);
print();
printf("\n");
break;
}
case 3:
{
do{
printf("请输入你要删除的数:\n");
scanf("%d",&m);
Delete(m);
print();
getchar();
printf("是否需要继续删除数据?是,请输入“Y”,否,请输入“N”\n");
scanf("%c",&A);
if(A=='Y'||A=='y')
z=1;
else
z=0;
}while(z);
break;
}
case 4:
{
size=0;
}
}
}while(size!=0);
#include<malloc.h>
struct list
{
int data;
struct list *next;
};
typedef struct list node;
typedef struct list *link;
link head,p,q;
//====================================
//创建链表
//====================================
void create(int n)
{
int i=1;
head=(link)malloc(sizeof(node));
printf("请输入第%d个数的大小:\n",i);
scanf("%d",&head->data);
q=head;
head->next=NULL;
for(i=2;i<=n;i++)
{
p=(link)malloc(sizeof(node));
printf("请输入第%d个数的大小:\n",i);
scanf("%d",&p->data);
q->next=p;
q=p;
}
q->next=NULL;
}
//====================================
//在x元素前插入数据元素y
//====================================
void insert(int x,int y)
{
link New;
New=(link)malloc(sizeof(node));
New->data=y;
p=head;
q=p->next;
if(head->data==x)
{
New->next=head;
head=New;
}
else
{
while((q->data!=x)&&(p->next!=NULL))
{
p=q;
q=q->next;
}
if(q->data==x)
{
p->next=New;
New->next=q;
}
else
printf("不存在%d这个数据!",x);
}
}
//====================================
//打印函数
//====================================
void print()
{
q=head;
while(q!=NULL)
{
printf("%d\t",q->data);
q=q->next;
}
printf("\n");
}
//====================================
//删除函数
//====================================
void Delete(int x)
{
p=head;
q=p->next;
if(head->data==x)
head=head->next;
else
{
while(p->next!=NULL)
{
if(q->data==x)
p->next=q->next;
p=q;
q=q->next;
}
}
}
//==================================
//主函数
//==================================
void main()
{
int n,m,x,y,z,size;
char A;
do{
printf("\n========================================\n");
printf("1.创建链表\n");
printf("2.在x元素前插入数据元素y\n");
printf("3.删除函数\n");
printf("4.退出\n");
printf("\n========================================\n");
printf("请输入你要选择的选项:");
scanf("%d",&size);
switch(size)
{
case 1:
{
printf("请输入链表元素的个数:");
scanf("%d",&n);
create(n);
print();
printf("\n");
break;
}
case 2:
{
printf("请分别输入你要插入的数据及插入在那个数据之前:");
scanf("%d%d",&x,&y);
insert(x,y);
print();
printf("\n");
break;
}
case 3:
{
do{
printf("请输入你要删除的数:\n");
scanf("%d",&m);
Delete(m);
print();
getchar();
printf("是否需要继续删除数据?是,请输入“Y”,否,请输入“N”\n");
scanf("%c",&A);
if(A=='Y'||A=='y')
z=1;
else
z=0;
}while(z);
break;
}
case 4:
{
size=0;
}
}
}while(size!=0);
}
心得体会:第一:起初把结构体变量,结构体指针,结构体名,自定义结构体变量,自定义结构体变量指针等弄的稀里糊涂,后面通过仔细体会终于知道typedef struct list node;typedef struct *link中struct list 为结构体类型名,node为结构体变量名,*link为结构体指针变量名.其结构相当于typedef int A 和typedef int *A.要注意:typedef是定义一种类型的别名,而define是定义一个常量或者变量的别名。
第二:getchar();的使用,getchar()为接收输入一个字符,起初自己没有用getchar();函数,程序直接将\n作为数据的输入,导致跳过了自己输入数据来需要继续删除数据。资料:
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.putchar函数(字符输出函数)的作用是向终端输出一个字符。其一般形式为 putchar(c)
- 链表的创建,删除,插入小型程序。
- 链表的创建,插入,删除示例程序
- 链表的创建,插入,删除
- 链表的创建,插入,删除,逆序
- 链表的创建、插入、删除操作
- 链表的创建、查询、插入、删除
- 单向链表的创建 删除 插入
- 链表的创建、插入、删除操作
- 双向链表的创建/插入/删除
- 链表的创建,插入,删除,输出
- 链表的创建、查询、删除,插入;
- 链表的创建、查询、删除,插入;
- 链表的创建、插入以及删除
- 链表的创建、插入、删除
- 链表的创建插入删除
- C++链表的创建和插入删除的实现
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- 单向动态链表的创建、输入、插入、删除、输出
- Xamarin.Android 4.8.00013 & Xamarin.iOS 1.3.250.0 Patched Executable
- Android Chronometer控件使用,计时器
- thrift之默认传输类TTransportDefaults和虚拟传输类TVirtualTransport
- hadoop2官方文档中文翻译(3)---集群配置【还未翻译完】
- StringBuilder类
- 链表的创建,删除,插入小型程序。
- 黑马程序员—C#系列 (三)
- poj 3026 Borg Maze (bfs+最小生成树)
- Smack文档(翻译)
- java读取文件方法大全
- CF 332A Down the Hatch! 超级水题。。不过题目太长了
- HTML5 Canvas中实现绘制一个像素宽的细线
- thrift之TTransport层的堵塞的套接字I/O传输类TSocket
- 《C和指针》读书笔记(9)