typedef的用法 单向链表的查找、增加、删除、销毁。
一:typedef的用法。
写一个数据结构(计算机存储数据的一种方式,是抽象的,可以人为组织,提高算法效率),我们需要注意:接口友好,模块化,规范命名等方面,在接口友好方面,typedef是非常好用并且标准及人性化的。
二:单向链表的查找、增加、删除、销毁。(要是只写一段查找或者增加的某程序,倒不是很好写,所以就写了个简单的学生系统,也可以练习下自己的c语言,看的客官注意注释)。
阅读(1) | 评论(0) | 转发(0) |
写一个数据结构(计算机存储数据的一种方式,是抽象的,可以人为组织,提高算法效率),我们需要注意:接口友好,模块化,规范命名等方面,在接口友好方面,typedef是非常好用并且标准及人性化的。
点击(此处)折叠或打开
- /*定义一个叫student的结构体*/
-
struct student
-
{
- int Id;
- char name[20];
- };
-
- /*定义成员*/
- struct stduent stu1,stu2; //定义了2个名字分别为stu1和stu2的结构体
- struct student *stu; //定义一个指向stu的4字节的指针
- typedef struct student * head; //将struct student * 定义为 head
- head h; //直接用head 就可以定义头指针
点击(此处)折叠或打开
-
/*************************************************************************
-
> File Name: link.c
-
> Author:
-
> Mail:
-
> Created Time: Thu 23 Jul 2015 11:41:41 AM CST
-
************************************************************************/
-
-
#include<stdio.h>
-
#include<stdlib.h>
-
#define LEN sizeof(struct student)
-
-
-
struct student
-
{
-
int Id;
-
char name[20];
-
struct student *next;
-
};
-
-
typedef struct student * head; //用typedef 以后我定义指针就直接用head了。
-
-
head Input(head h);
-
head Delete();
-
int Ruin(head h);
-
void Print();
-
head Find();
-
void biaotou();
-
-
void biaotou()
-
{
-
printf("\n 信息表\n");
-
printf("学生编号\t学生姓名\n");
-
}
-
head Find(head h)
-
{
-
int Id;
-
head p;
-
-
printf("请输入学生编号\n");
-
scanf("%d",&Id);
-
for(p = h ;p->next;p = p->next) //查找过程
-
{
-
if(p->next->Id == Id) //为什么直接用p->next->Id ,原因是返回要找的前驱节点,以后删除和增加的时候都有好处。
-
-
{
-
biaotou();
-
printf("%d\t\t%s\n",p->next->Id,p->next->name);
-
break;
-
}
-
}
-
if(p->next == NULL)
-
{
-
printf("没有此学号\n");
-
}
-
-
-
return(p);
-
}
-
void Print(head h)
-
{
-
head p;
-
-
printf("\n 信息表\n");
-
printf("学生编号\t学生姓名\n");
-
for(p = h->next; p; p = p->next) //显示的时候直接显示p->next
-
printf("%d\t\t%s\n",p->Id,p->name);
-
-
-
}
-
int Ruin(head h)
-
{
-
head p = NULL;
-
int choice;
-
-
printf("确定销毁整个链表?(1:销毁,2:不销毁)\n");
-
scanf("%d",&choice);
-
if(choice == 1)
-
{
- for(p;h->next;) //传进来头结点 然后每次保存h->next
- { //改链域之后在删除第二个,然后第三个,
-
p = h->next;
-
h->next = p->next;
-
free(p); //最后需要把最后一个也释放
-
}
-
free(h);
-
printf("销毁成功\n");
-
}
-
if(choice == 2)
-
{
-
return 0;
-
}
-
}
-
head Delete(head t)
-
{
-
head p;
-
-
p = t->next; //保存要删除的节点
- t->next = p->next; //更改链域绕过要删除的节点
-
free(p); //删除要删除的节点
-
printf("删除成功\n");
-
-
}
-
-
void Add(head t) //在插入之前,已经查找了插入点的位置
-
{
-
head p ; // t:find()函数的返回值,返回查找到点的前驱节点
-
-
p = (head) malloc (LEN);
-
printf("请输入要插入学生的信息\n");
-
printf("请输入学生Id\n");
-
scanf("%d",&p->Id);
-
printf("请输入学生姓名\n");
-
scanf("%s",p->name); //准备好要插入的信息
- p->next = t->next; //将要插入的节点与后一个节点相连
-
t->next = p; //将前驱节点与要插入的节点相连即可
-
-
-
}
-
head Input(head h)
-
{
-
char choice;
-
head p;
-
head q;
-
h = (head) malloc(LEN); //整个结构要清晰 head p; 表示p是一个四字节的,指向结构体的指针
-
q = h; //malloc 之后,就相当于有了空间 并且p指向它
-
do
-
{
-
p = (head) malloc(LEN);
-
printf("请输入学生Id\n");
-
scanf("%d",&p->Id);
-
printf("请输入学生姓名\n");
-
scanf("%s",p->name);
-
p->next = NULL;
-
h->next = p;
-
h = p;
-
printf("Contine?(Y/N)\n");
-
getchar();
-
scanf("%c",&choice);
-
}while(choice == 'Y'||choice == 'y' );
-
-
return(q);
-
-
}
-
-
-
-
int main(int argc,char *agrv[])
-
{
-
head h = NULL;
-
head t = NULL; //查找到的学生信息id所指的指针
-
int choice;
-
-
printf("学生信息\n");
-
do
-
{
-
printf("1:输入信息\n");
-
printf("2:增加信息\n");
-
printf("3:删除信息\n");
-
printf("4:销毁信息\n");
-
printf("5:显示信息\n");
-
printf("6:查找信息\n");
-
printf("0:退出程序\n");
-
printf("请输入:");
-
scanf("%d",&choice);
-
switch(choice)
-
{
-
case 1:h = Input(h);
-
break;
-
case 2:
-
printf("请先确定要插入的位置学号(前插入)是否存在\n");
-
printf("注意:若不存在,默认插入到最后\n");
-
t = Find(h);
-
Add(t);
-
break;
-
case 3:
-
printf("请先确定要删除的学号是否存在\n");
-
t = Find(h);
-
Delete(t);
-
break;
-
case 4:Ruin(h);
-
break;
-
case 5:Print(h);
-
break;
-
case 6:Find(h);
-
break;
-
}
-
}while(choice != 0);
- }
相关热门文章
给主人留下些什么吧!~~
评论热议
版权声明:本文为博主原创文章,未经博主允许不得转载。