• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >数据结构 > 数据结构教程 第十二课 实验二 循环链表实验

数据结构教程 第十二课 实验二 循环链表实验

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了数据结构教程,数据结构教程李春葆,数据结构视频教程,数据结构教程第四版,c语言数据结构教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

本课主题: 实验二 循环链表实验

教学目的: 掌握单向链表的实现方法

教学重点: 单向链表的存储表示及操作

教学难点: 单向链表的操作实现

授课内容:

一、单向链表的存储表示

C源程序

#include<stdio.h>
#include<malloc.h>
#include<conio.h>

#define ERROR 0
#define OK 1
#define EQUAL 1
#define OVERFLOW -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

struct STU{
  char name[20];
  char stuno[10];
  int age;
  int score;
}stu[50];
typedef struct STU ElemType;

struct LNODE
{
  ElemType data;
  struct LNODE *next;
};

typedef struct LNODE LNode;
typedef struct LNODE *LinkList;


int init(LinkList *L)
{
  *L=(LNode *)malloc(sizeof(LNode));
  if(!L)   exit(ERROR);
  (*L)->next=NULL;
  return OK;
}/*init */

int ListLength(LinkList L)
{
  int j=0;
  while (L->next)
    {
      L=L->next;
      j++;
    }
  return j;
}

int GetElem(LinkList L,int i,ElemType *e)
{
  LinkList p; int j;
  p=L->next;j=1;
  while(p&&j<i){
    p=p->next;++j;
  }
  if(!p||j>1)  return ERROR;
  *e=p->data;
  return OK;
}

int EqualList(ElemType *e1,ElemType *e2)
{
  if (strcmp(e1->name,e2->name)==0)
    return 1;
  else
    return 0;
}

int Less_EqualList(ElemType *e1,ElemType *e2)
{
  if (strcmp(e1->name,e2->name)<=0)
    return 1;
  else
    return 0;
}
int LocateElem(LinkList La,ElemType e,int type)
{
  int i;
  LinkList p;
  p=La;
  switch (type)
    {
      case EQUAL:
	  while(p->next)
	    {
	      p=p->next;
	      if(EqualList(&p->data,&e))
	       return 1;
	    }
	  return 0;
	break;
      default:
	break;
    }
  return 0;
}

void MergeList(LinkList La,LinkList Lb,LinkList *Lc)
{
  LinkList pa,pb,pc;
  pa=La->next;pb=Lb->next;
  *Lc=pc=La;
  while(pa && pb)
    {
      if(Less_EqualList(&pa->data,&pb->data))
	{
	  pc->next=pa;pc=pa;pa=pa->next;
	}
      else
	{
	  pc->next=pb;pc=pb;pb=pb->next;
	}
    }
  pc->next=pa?pa:pb;
  free(Lb);
}

int printlist(LinkList L)
{
  int i;
  LinkList p;
  p=L;
  printf("name       stuno        age     score\n");
  while(p->next)
    {
      p=p->next;
      printf("%-10s %s\t%d\t%d\n",  p->data.name,  p->data.stuno,
	  p->data.age,  p->data.score);
    }
  printf("\n");
}

int ListInsert(LinkList L,int i,ElemType e)
{
  LinkList p,s;
  int j;
  p=L;j=0;
  while(p&&j<i-1)
    {
      p=p->next;
      ++j;
    }
  if(!p||j>i-1) return ERROR;
  s=(LinkList)malloc(sizeof(LNode));
  s->data=e;
  s->next=p->next;
  p->next=s;
  return OK;
}/*ListInsert Before i */


main()
{
  struct STU e;
  LinkList La,Lb,Lc;

  clrscr();

  printf("\n\n-------------------List Demo is running...----------------\n\n");
  printf("First is InsertList function.\n");
  init(&La);

  strcpy(e.name,"stu1");
  strcpy(e.stuno,"100001");
  e.age=80;
  e.score=1000;
  ListInsert(La,1,e);
  strcpy(e.name,"stu3");
  strcpy(e.stuno,"100002");
  e.age=80;
  e.score=1000;
  ListInsert(La,2,e);

  printlist(La);
  getch();

  strcpy(e.name,"stu5");
  strcpy(e.stuno,"100003");
  e.age=80;
  e.score=1000;
  ListInsert(La,3,e);

  printlist(La);
  getch();

  init(&Lb);

  strcpy(e.name,"stu2");
  strcpy(e.stuno,"100001");
  e.age=80;
  e.score=1000;
  ListInsert(Lb,1,e);
  strcpy(e.name,"stu4");
  strcpy(e.stuno,"100002");
  e.age=80;
  e.score=1000;
  ListInsert(Lb,2,e);

  strcpy(e.name,"stu6");
  strcpy(e.stuno,"100001");
  e.age=80;
  e.score=1000;
  ListInsert(Lb,3,e);

  printlist(Lb);
  getch();

  MergeList(La,Lb,&Lc);
  printlist(Lc);
  getch();

  printf("\n\n\n\n\n\nWelcome to visit http://zmofun.heha.net !\n\n\n\n\n\n\n");

}


 2  下一页</div> </div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 数据结构教程
  • 数据结构教程 第十课 栈的表示与实现
  • 数据结构教程 第九课 循环链表与双向链表
  • 数据结构教程 第八课 线性表的链式表示与实现
  • 数据结构教程 第七课 实验一 线性表的顺序存储实验
  • 数据结构教程 第六课 线性表的顺序表示和实现
  • 数据结构教程 第五课 线性表的类型定义
  • 数据结构教程 第三十五课 实验七 查找
  • 数据结构教程 第三十四课 插入排序、快速排序
  • 数据结构教程 第三十三课 哈希表(二)

相关文章

  • 2017-06-28数据结构教程 第三十七课 实验八 排序实验
  • 2017-06-28数据结构教程 第三十一课 动态查找表
  • 2017-06-28java排序算法
  • 2017-06-28在A寻路中使用二叉堆
  • 2017-06-28二进制格雷码与自然二进制码的互换
  • 2017-06-28VFP中产生随机数并实现起泡排序
  • 2017-06-28PB动态创建菜单的核心算法描述
  • 2017-06-28RSA算法的实现(java版)
  • 2017-06-28模拟退火算法求解TSP问题
  • 2017-06-28数据结构教程 第三十课 静态查找表(二)有序表的查找

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 数据结构C语言实现之二叉树
    • 有序链表转换二叉搜索树
    • RSA算法的实现(java版)
    • 数据结构教程 第二十四课 遍历二叉树
    • 验证哥德巴赫猜想
    • 数据结构教程 第三十六课 选择排序、归并排序
    • 数据结构教程 第二十八课 图的存储结构
    • 数据结构教程 第九课 循环链表与双向链表
    • 数据结构C语言实现之队列
    • 数据结构教程 第三十八课 文件概念、顺序文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有