信息管理(单链表)
来源:互联网 发布:九鼎软件系统 编辑:程序博客网 时间:2024/04/29 23:48
······················对单链表的学习总结·····················
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int ElemType;
typedef struct Node
{
char name[20]; //名字
int num; //学号
int CH; //语文
int MA; //数学
int EN; //英语
struct Node *next;
}Node;
Node * NewLink(int n) //头插法建立新表
{
Node *p, *h;
int i;
h = NULL;
for (i = 0; i < n; i++)
{
if ((p = (Node *)malloc(sizeof(Node))) == NULL)
{
printf("不能分配空间!");
exit(0);
}
p->next = h;
h = p;
printf("\n请输入第%d位学生姓名:", i + 1);
scanf("%s",p->name);
printf("\n请输入学号:");
scanf("%d", &p->num);
printf("\n请输入语文成绩:");
scanf("%d", &p->CH);
printf("\n请输入数学成绩:");
scanf("%d", &p->MA);
printf("\n请输入英语成绩:");
scanf("%d", &p->EN);
}
if (h != NULL)
printf("申请成功!");
return (h);
}
Node * CreateList_End(int n) //尾插法,头结点为NULL
{
Node *head, *p, *e;
int i;
head = (Node *)malloc(sizeof(Node));
e = head; //让e指向头结点
for(i=0;i<n;i++)
{
p = (Node*)malloc(sizeof(Node));
printf("\n请输入第%d位学生姓名:", i + 1);
scanf("%s", p->name);
printf("\n请输入学号:");
scanf("%d", &p->num);
printf("\n请输入语文成绩:");
scanf("%d", &p->CH);
printf("\n请输入数学成绩:");
scanf("%d", &p->MA);
printf("\n请输入英语成绩:");
scanf("%d", &p->EN);
e->next = p; //把新结点添加到表尾
e = p; //把指针指向新结点
}
e->next = NULL; //尾结点的指针域置空
return head;
}
Node * search(Node * head, char *name) //对单个元素进行查找
{
Node *p;
char *y;
p = head->next;
while (p != NULL)
{
y = p->name;
if (strcmp(y, name) == 0)
{
printf("姓名:%s\n", p->name);
printf("\n学号: %d\n", p->num);
printf("\n 语文:%d 数学:%d 英语:%d\n",p->CH,p->MA,p->EN);
return (p);
}
else p = p->next;
}
if (p == NULL)
printf("没有查找到该数据!");
return 0;
}
void insert(Node *head) //头插法插入新信息
{
Node *p,*s;
char x[20];
char *y;
p = head->next; //p=head的头结点
while (p != NULL)
{
printf("名字:%s学号:%d语文:%d数学:%d英语:%d\n", p->name, p->num, p->CH, p->MA, p->EN);
p = p->next; //指向下一个结点
}
printf("\n请问在那位学生的后面插入信息:");
scanf("%s",x);
s = (Node *)malloc(sizeof(Node));
while (p != NULL)
{
y = p->name;
if (strcmp(y,x)==0) //在x同学的后面插入信息
{
printf("\n请输入你要插入的信息!");
printf("\n请输入学生姓名:");
scanf("%s", &p->name);
printf("\n请输入学生学号:");
scanf("%d", &p->num);
printf("\n请输入语文成绩:");
scanf("%d", &p->CH);
printf("\n请输入数学成绩:");
scanf("%d", &p->MA);
printf("\n请输入英语成绩:");
s->next = p->next;
p->next = s;
}
else p = p->next;
}
}
Node * search2(Node *h,char *x) //求出当前结点的前驱结点
{
Node *p, *s;
char *y;
p = h->next;
s = h;
while (p != NULL)
{
y = p->name;
if (strcmp(y,x) == 0)
return(s);
else
{
p = p->next;
s = s->next;
}
}
if (p == NULL)
printf("没有查找到数据!");
return 0;
}
void del(Node *x, Node *y) //删除结点
{
Node *s;
s = y;
x->next = y->next;
free(s);
}
void change(Node * head,char *x)
{
Node *p = head->next;
char *y;
while (p != NULL)
{
y = p->name;
if (strcmp(y, x) == 0)
{
printf("\n请输入你要修改的信息!");
printf("\n请输入学生姓名:");
scanf("%s", &p->name);
printf("\n请输入学生学号:");
scanf("%d", &p->num);
printf("\n请输入语文成绩:");
scanf("%d", &p->CH);
printf("\n请输入数学成绩:");
scanf("%d", &p->MA);
printf("\n请输入英语成绩:");
}
else p = p->next;
}
}
int main()
{
int n;
Node *head, *searchpoint,*forepoint; //searchpoint为前驱结点,forepoint为当前结点
char name[20];
printf("需要录入多少位同学的信息:");
scanf("%d", &n);
//head = NewLink(n); //建立初始化函数
head = CreateList_End(n);
system("cls");
while (1)
{
printf("\t\t\t1)查找信息\n\n");
printf("\t\t\t2)修改信息\n\n");
printf("\t\t\t3)删除信息\n\n");
printf("\t\t\t4)增加信息\n\n");
printf("\n请输入要要执行的命令: ");
scanf("%d", &n);
if (n == 1)
{
printf("\n请输入你要查找的人的姓名:");
scanf("%s", &name);
search(head, name);
system("cls");
}
else if (n == 2)
{
printf("\n请输入要更改的学生信息:");
scanf("%s", &name);
change(head, name);
system("cls");
}
else if (n == 3)
{
printf("\n请输入你要删除的人的信息:");
scanf("%s", &name);
forepoint = search(head, name);
searchpoint = search2(head, name);
del(searchpoint, forepoint);
system("cls");
}
else if (n == 4)
{
printf("\n请输入要增加的信息:\n");
insert(head);
system("cls");
}
}
}
- 信息管理(单链表)
- C语言学生信息管理系统(单链表)
- 单链表构建学生信息管理系统(C++)
- 单链表-【学生信息管理系统】
- 单链表+学生信息管理系统
- 人员信息管理(Ⅰ)
- 人员信息管理(Ⅱ)
- 人员信息管理(Ⅲ)
- 人员信息管理(Ⅳ)
- 人员信息管理(Ⅴ)
- 人员信息管理(Ⅴ)
- 会员信息管理(总结)
- 信息管理系统(java)
- 学生信息管理(数组)
- 信息管理
- 信息管理
- 信息管理
- 信息管理
- 事件流(事件冒泡、事件捕获以及DOM事件流)
- java实现观察者模式
- Android中常见的异常及原因
- S5PV210开发 -- I2C 你知道多少?(二)
- clock_gettime系统调用详解
- 信息管理(单链表)
- TCP三次握手流程及为什么是三次握手
- TensorFlow基础(一)--入门
- struts2-11请求参数接收
- python-冒泡排序的理解!
- 【转】Faster RCNN原理分析(二):Region Proposal Networks详解
- HTTP错误汇总(404、302、200……)
- Android 反射机制获取或设置系统属性(SystemProperties)
- 【Python进入山东小学教材】吴恩达:孩子会识字后立马教她Python!