指针,链表的原理和各类操作相关心得以及学生信息管理系统

<强>

<强>§1, <强>指向结构体变量的指针变量

<强>§2, <强>指向结构体数组的指针变量


<强>§3, <>强链表的概念

<强>§5, <>强链表的相关操作


# include & lt; stdio.h>,

# include & lt; conio.h>,

# include & lt; string.h>,

# include & lt; stdlib.h>

# define N 3

typedef结构节点{

,,char[20]名称;

,,结构节点*链接;

}螺栓;

螺柱*创造(int n)/*建立单链表的函数*/

{

,,螺栓* p * h *年代;

,我,int;

,,如果((h=(螺柱*)malloc (sizeof(螺栓)))==NULL)

,,{

,,,printf("不能分配内存空间!”);

,,,退出(0);

,,}

,,h→名称[0]=' \ 0;

,,h→链接=零;

,,p=h;

,,(我=0;i

,,{

,,,如果((s=(螺柱*)malloc (sizeof(螺栓)))==NULL)

,,,{

,,,,printf("不能分配内存空间!”);

,,,,退出(0);

,,,}

,,,p→链接=s;

,,,printf(“请输入第% d个人的姓名:“,我+ 1);

,,,scanf (“% s”s→名称),

,,,年代→链接=零;

,,s, p=,

,,}

,,返回(h);

}

螺柱*搜索(螺柱* h, char * x)/*查找函数*/

{

,,螺栓* p;

,,char * y;

,,p=h→联系;

,,而(p !=NULL)

,,{

,,,y=p→名称;

,,,如果(strcmp (y, x)==0)

,,,,返回(p);

,,其他,p=p→联系;

,,}

,,如果(p==NULL)

,,,printf("没有查找到该数据!”);}


螺柱* search3(螺柱* h, char * x),

/*另一个查找函数,返回的是上一个查找函数的直接前驱结点的指针,

h为表头指针,x为指向要查找的姓名的指针

其实此函数的算法与上面的查找算法是一样的,只是多了一个指针,并且年代总是指向指针p所指向的结点的直接前驱,

结果返回年代即是要查找的结点的前一个结点*/

{

,,螺栓* p *年代;

,,char * y;

,,p=h→联系;

,h, s=,

,,而(p !=NULL)

,,{

,,,y=p→名称;

,,,如果(strcmp (y, x)==0)

,,,,返回(s);

,,其他,

,,,{

,,,p, p=?

,,,,=年代→联系;

,,,}

,,}

,,如果(p==NULL)

,,printf("没有查找到该数据!”);}

空隙插入(螺柱* p)/*插入函数,在指针p后插入*/

{

,,char stuname [20],

,,螺栓*年代;/*指针年代是保存新结点地址的*/

,,如果((s=(螺柱*)malloc (sizeof(螺栓)))==NULL)

,,{

,,,printf("不能分配内存空间!”);

,,,退出(0);

,,}

,,printf(“请输入你要插入的人的姓名:”);

,,scanf (“% s”, stuname);

,,拷贝字符串(s→名称、stuname);/*把指针stuname所指向的数组元素拷贝给新结点的数据域*/

,=p, s→联系→联系;/*把新结点的链域指向原来p结点的后继结点*/

,,p→链接=s;/* p结点的链域指向新结点*/}


空白德尔(螺柱* x,螺栓* y)/*删除函数,其中y为要删除的结点的指针,x为要删除的结点的前一个结点的指针*/

{

,螺柱*年代;

,s=y;

,x→链接=y→链接;

,自由(s);

}



空白打印(螺柱* h)

{

,,螺栓* p;

,,p=h→联系;

,,printf("数据信息为:\ n”);

,,而(p !=NULL)

,,{

,,,printf (" % s \ n ",, * (p→名称));

,,p, p=?

,,}

}



无效退出()

{

,退出(0);

}

空白菜单(void)

{

,,系统(cls);,

,,printf (" \ \ t \ t单链表C语言实现实例\ n”);

,,printf (" \ \ t | - - - - - - - - - - - - - - - - - | \ n”);

,,printf (" \ \ t | | \ n”);

,,printf (" \ \ t |[1]建立新表| \ n”);

,,printf (" \ \ t |[2]查找数据| \ n”);

,,printf (" \ \ t |[3]插入数据| \ n”);

,,printf (" \ \ t |[4]删除数据| \ n”);

,,printf (" \ \ t |[5]打印数据| \ n”);

,,null

指针,链表的原理和各类操作相关心得以及学生信息管理系统