链表的创建、插入、删除、释入
来源:互联网 发布:淘宝开店一定要交保证金吗 编辑:程序博客网 时间:2024/06/06 11:18
#include<stdio.h>
#include<stdlib.h>
struct chain
{
int num;
float score;
struct chain *next;
};
//创建新链表
struct chain *create()
{
struct chain *head;
//申请新节点空间
head = (struct chain *)malloc(sizeof(struct chain));
if(head == NULL)
{
printf("申请节点失败\n");
return NULL;
}
return head;
}
//加入新的节点
struct chain *insert(struct chain *head,struct chain *s)
{
struct chain *p=head;
//如果链表循环并且新节点的分数大于下一个节点的分数
while((p->next != NULL) && (s->score > p->next->score))
{
p=p->next;
}
//如果链表循环到结尾
if(p->next == NULL)
{
p->next = s;
s->next = NULL;
}
//如果新的节点的分数大于下一个节点的分数
else
{
p->next = s;
s->next = p->next;
}
return head;
}
//查找符号条件的节点
struct chain *search(struct chain *head)
{
int num;
struct chain *p = head;
printf("请输入要查找的学生的学号:\n");
scanf("%d",&num);
//链表循环并且链表中的学号不等于要查找的学号
while((p->next != NULL) && (p->num != num))
{
p=p->next;
}
//链表循环到结尾
if(p->next == NULL)
{
printf("查找学号失败,没有这个学号\n");
return NULL;
}
//链表中的学号等于要查找的学号
else
{
printf("找到符号条件的学号num=%d\t%f",p->num,p->score);
return p;
}
}
//对链表进遍历输出
void printf_list(struct chain *head)
{
struct chain *p = head;
printf("链表如下:\n");
while(p->next != NULL)
{
printf("学生的学号%d,成绩%f",p->num,p->score);
p=p->next;
}
}
//释放链表
void free_list(struct chain *head)
{
struct chain *p = head;
while(p->next != NULL)
{
head = head->next;
free(p);
p=head;
}
printf("释入链表成功\n");
}
//删除链表符合条件的节点
struct chain *delete_list(struct chain *head,int num)
{
struct chain *p = head;
struct chain *q = head->next;
while((q != NULL) && (q->num != num))
{
p=q;
q=q->next;
}
if(q == NULL)
{
printf("删除失败,没有找到符合条件的节点\n");
return NULL;
}
else
{
p->next = q->next;
free(q);
printf("删除节点成功\n");
}
return head;
}
int main()
{
struct chain *p,*head;
int num;
int c;
float score;
printf("有头节点的链表操作程序:\n");
head = create();
while(1)
{
printf("I:插入节点(自动升序) P:输出链表 S:查找节点 D:删除节点\
E:释入链表并退出程序\n");
c = getchar();
switch(c)
{
case'I':
printf("请分别输入要插入学生的学号和成绩\n");
scanf("%d%f",&num,&score);
p = (struct chain *)malloc(sizeof(struct chain));
if(p == NULL)
{
printf("申请节点失败\n");
exit(0);
}
p->num = num;
p->score = score;
insert(head,p);
printf("插入成功\n");
break;
case'P':
printf_list(head);
break;
case'S':
search(head);
break;
case'D':
printf("请输入要删除学生的学生号:\n");
scanf("%d",&num);
delete_list(head,num);
break;
case'E':
free_list(head);
exit(0);
}
}
return 0;
}
#include<stdlib.h>
struct chain
{
int num;
float score;
struct chain *next;
};
//创建新链表
struct chain *create()
{
struct chain *head;
//申请新节点空间
head = (struct chain *)malloc(sizeof(struct chain));
if(head == NULL)
{
printf("申请节点失败\n");
return NULL;
}
return head;
}
//加入新的节点
struct chain *insert(struct chain *head,struct chain *s)
{
struct chain *p=head;
//如果链表循环并且新节点的分数大于下一个节点的分数
while((p->next != NULL) && (s->score > p->next->score))
{
p=p->next;
}
//如果链表循环到结尾
if(p->next == NULL)
{
p->next = s;
s->next = NULL;
}
//如果新的节点的分数大于下一个节点的分数
else
{
p->next = s;
s->next = p->next;
}
return head;
}
//查找符号条件的节点
struct chain *search(struct chain *head)
{
int num;
struct chain *p = head;
printf("请输入要查找的学生的学号:\n");
scanf("%d",&num);
//链表循环并且链表中的学号不等于要查找的学号
while((p->next != NULL) && (p->num != num))
{
p=p->next;
}
//链表循环到结尾
if(p->next == NULL)
{
printf("查找学号失败,没有这个学号\n");
return NULL;
}
//链表中的学号等于要查找的学号
else
{
printf("找到符号条件的学号num=%d\t%f",p->num,p->score);
return p;
}
}
//对链表进遍历输出
void printf_list(struct chain *head)
{
struct chain *p = head;
printf("链表如下:\n");
while(p->next != NULL)
{
printf("学生的学号%d,成绩%f",p->num,p->score);
p=p->next;
}
}
//释放链表
void free_list(struct chain *head)
{
struct chain *p = head;
while(p->next != NULL)
{
head = head->next;
free(p);
p=head;
}
printf("释入链表成功\n");
}
//删除链表符合条件的节点
struct chain *delete_list(struct chain *head,int num)
{
struct chain *p = head;
struct chain *q = head->next;
while((q != NULL) && (q->num != num))
{
p=q;
q=q->next;
}
if(q == NULL)
{
printf("删除失败,没有找到符合条件的节点\n");
return NULL;
}
else
{
p->next = q->next;
free(q);
printf("删除节点成功\n");
}
return head;
}
int main()
{
struct chain *p,*head;
int num;
int c;
float score;
printf("有头节点的链表操作程序:\n");
head = create();
while(1)
{
printf("I:插入节点(自动升序) P:输出链表 S:查找节点 D:删除节点\
E:释入链表并退出程序\n");
c = getchar();
switch(c)
{
case'I':
printf("请分别输入要插入学生的学号和成绩\n");
scanf("%d%f",&num,&score);
p = (struct chain *)malloc(sizeof(struct chain));
if(p == NULL)
{
printf("申请节点失败\n");
exit(0);
}
p->num = num;
p->score = score;
insert(head,p);
printf("插入成功\n");
break;
case'P':
printf_list(head);
break;
case'S':
search(head);
break;
case'D':
printf("请输入要删除学生的学生号:\n");
scanf("%d",&num);
delete_list(head,num);
break;
case'E':
free_list(head);
exit(0);
}
}
return 0;
}
阅读全文
0 0
- 链表的创建、插入、删除、释入
- 链表的创建,插入,删除
- 链表的创建,插入,删除,逆序
- 链表的创建、插入、删除操作
- 链表的创建、查询、插入、删除
- 单向链表的创建 删除 插入
- 链表的创建、插入、删除操作
- 双向链表的创建/插入/删除
- 链表的创建,插入,删除,输出
- 链表的创建、查询、删除,插入;
- 链表的创建、查询、删除,插入;
- 链表的创建、插入以及删除
- 链表的创建、插入、删除
- 链表的创建插入删除
- C++链表的创建和插入删除的实现
- 单向动态链表的创建、输入、插入、删除、输出
- 单链线性表的创建,插入,删除及合并
- 一道习题:链表的创建、输出、删除、插入
- SeekBar
- 可称1~40磅的四块砝码
- HttpClient4.5 简单入门
- JVM系列三:JVM参数设置、分析
- P1206 犯罪团伙
- 链表的创建、插入、删除、释入
- .hpp与.h的区别
- 神经网络-tensorflow实现mnist手写数字识别
- Html&Css相关文章索引(1)
- 文章标题
- 【算法-java】打印出二叉树中结点值的和为输入整数的所有路径
- 如何向MVC5项目中添加Wep API
- STL之queue容器
- 一个带清除按钮的EditText-->ClearEditText