链表的C语言实现(七)

原创 2005年04月30日 03:16:00
在这里列举了一个应用单链表基本算法的综合程序,双向链表和循环链表的综合程序大家可以自己去试一试。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 10

typedef struct node
{
char name[20];
struct node *link;
}stud;

stud * creat(int n)
{
stud *p,*h,*s;
int i;
if((h=(stud *)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
h->name[0]='/0';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s= (stud *) malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
p->link=s;
printf("请输入第%d个人的姓名",i+1);
scanf("%s",s->name);
s->link=NULL;
p=s;
}
return(h);
}

stud * search(stud *h,char *x)
{
stud *p;
char *y;
p=h->link;
while(p!=NULL)
{
y=p->name;
if(strcmp(y,x)==0)
return(p);
else p=p->link;
}
if(p==NULL)
printf("没有查找到该数据!");
}

stud * search2(stud *h,char *x)
{
stud *p,*s;
char *y;
p=h->link;
s=h;
while(p!=NULL)
{
y=p->name;
if(strcmp(y,x)==0)
return(s);
else
{
p=p->link;
s=s->link;
}
}
if(p==NULL)
printf("没有查找到该数据!");
}

void insert(stud *p)
{
char stuname[20];
stud *s;
if((s= (stud *) malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
printf("/n请输入你要插入的人的姓名:");
scanf("%s",stuname);
strcpy(s->name,stuname);
s->link=p->link;
p->link=s;
}

void del(stud *x,stud *y)
{
stud *s;
s=y;
x->link=y->link;
free(s);
}

void print(stud *h)
{
stud *p;
p=h->link;
printf("数据信息为:/n");
while(p!=NULL)
{
printf("%s ",&*(p->name));
p=p->link;
}
}

void quit()
{
exit(0);
}

void menu(void)
{
clrscr();
printf("/t/t/t单链表C语言实现实例/n");
printf("/t/t|————————————————|/n");
printf("/t/t| |/n");
printf("/t/t| [1] 建 立 新 表 |/n");
printf("/t/t| [2] 查 找 数 据 |/n");
printf("/t/t| [3] 插 入 数 据 |/n");
printf("/t/t| [4] 删 除 数 据 |/n");
printf("/t/t| [5] 打 印 数 据 |/n");
printf("/t/t| [6] 退 出 |/n");
printf("/t/t| |/n");
printf("/t/t| 如未建立新表,请先建立! |/n");
printf("/t/t| |/n");
printf("/t/t|————————————————|/n");
printf("/t/t 请输入你的选项(1-6):");
}

main()
{
int choose;
stud *head,*searchpoint,*forepoint;
char fullname[20];


while(1)
{
menu();
scanf("%d",&choose);
switch(choose)
{
case 1:head=creat(N);
break;
case 2:printf("输入你所要查找的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
printf("你所查找的人的姓名为:%s",*&searchpoint->name);
printf("/n按回车键回到主菜单。");
getchar();getchar();
break;
case 3: printf("输入你要在哪个人后面插入:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
printf("你所查找的人的姓名为:%s",*&searchpoint->name);
insert(searchpoint);
print(head);
printf("/n按回车键回到主菜单。");
getchar();getchar();
break;
case 4:print(head);
printf("/n输入你所要删除的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
forepoint=search2(head,fullname);
del(forepoint,searchpoint);
break;
case 5:print(head);
printf("/n按回车键回到主菜单。");
getchar();getchar();
break;
case 6:quit();
break;
default:printf("你输入了非法字符!按回车键回到主菜单。");
clrscr();
menu();
getchar();
}
}
}

C语言单向链表的实现

一个简单结点的结构体表示为:    struct note    {       int  data;              /*数据成员可以是多个不同类型的数据*/       struct  ...
  • 21aspnet
  • 21aspnet
  • 2004年10月30日 16:30
  • 24316

c语言实现链表及其基本操作

链表:        链表是一种物理储存单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。...
  • MBuger
  • MBuger
  • 2016年09月13日 18:18
  • 8742

C语言 链表 数据结构实验之链表七:单链表中重复元素的删除

数据结构实验之链表七:单链表中重复元素的删除 Problem Description 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入...
  • zdadan
  • zdadan
  • 2018年01月20日 19:28
  • 26

学习心得:链表的操作(C语言实现)

今天将给大家讲述链表的学习心得。学习数据结构,毋庸置疑链表必须学好,后面的栈、队列、树、图都是以链表为基础的;链表的种类很多,有单链表、双链表、循环链表、非循环链表;在此,我们以非循环单链表为例,来讲...
  • lpp0900320123
  • lpp0900320123
  • 2014年03月03日 18:55
  • 58537

链表的简单实现(C语言版)

链表是一种简单的数据结构,其插入和删除的效率比较高链表定义(头文件):#ifndef NODE_H_INCLUDED #define NODE_H_INCLUDEDstruct Node; typed...
  • xiaodu1997
  • xiaodu1997
  • 2016年10月06日 23:29
  • 638

C语言 实现 链表栈

LinkStack.h 头文件声明如下: #include typedef int DataType; //自定义数据类型,假定为整型 struct Node; ...
  • lutinghuan
  • lutinghuan
  • 2012年04月18日 20:12
  • 11257

C语言实现栈(基于链表)

栈的底层数据结构可以是数组,也可以是链表,用链表实现栈,理论上是无限大的 下面是链栈的实现代码 #include #include typedef int datatype; //Link St...
  • weixin_36040034
  • weixin_36040034
  • 2016年11月26日 23:00
  • 2048

C语言实现贪吃蛇(三)----结构+链表实现

前言:本博客所讲到的知识跟前面我的两篇博客:《C语言实现贪吃蛇(一)—-数组实现》、《C语言实现贪吃蛇(二)—-局部刷新》 有很大的关系,建议大家前往看一下,尤其是第一篇,那篇博客是所有关于贪吃蛇游戏...
  • baidu_30000217
  • baidu_30000217
  • 2016年11月17日 22:42
  • 2444

单向链表的C语言实现与基本操作

本文的主要内容目录: 一、单向链表的C语言实现 二、单向链表的基本操作 一、单向链表的C语言实现 链表作为一种基本的数据结构在程序开发过程当中经常会使用到。对C语言来说链表的实现主要依靠结构体和指...
  • TECH_PRO
  • TECH_PRO
  • 2017年04月17日 05:59
  • 3250

c语言-指针实现链表增删改查

通过指针实现链表增删改查。 1.首先定义宏以及结构体作为数据结构使用。 #define LEN sizeof(struct student) struct student{ long num...
  • u012569119
  • u012569119
  • 2015年08月28日 23:48
  • 2095
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表的C语言实现(七)
举报原因:
原因补充:

(最多只允许输入30个字)