线性链表的操作

转载 2006年06月07日 10:40:00

 

#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");
 
}

C++实现线性链表的基本操作

C++实现顺序结构线性表的基本操作
  • sinat_34474705
  • sinat_34474705
  • 2017年01月10日 13:55
  • 1500

线性表的链式存储与基本操作

利用线性表的链式存储结构,设计一组输入数据(假定为一组整数),能够对单链表进行如下操作:   初始化一个带表头结点的空链表;   创建一个单链表是从无到有地建立起一个链表,即一个一个地输入各结点数据,...
  • qq_34803572
  • qq_34803572
  • 2016年10月15日 18:56
  • 1711

C语言实现线性链表的19个功能

#include "stdafx.h" #include "stdio.h" #include #include "string.h" typedef int elemType ; /***...
  • u013190620
  • u013190620
  • 2016年02月15日 23:23
  • 2311

线性链表 链式存储 操作代码

  • 2012年03月22日 19:28
  • 5KB
  • 下载

线性链表的基本操作

  • 2013年12月26日 14:38
  • 9KB
  • 下载

线性链表的基本操作(C语言)

  • 2010年09月24日 18:49
  • 43KB
  • 下载

数据结构C语言版线性链表的12个基本操作

线性链表的12个基本操作 分别是:构造 销毁 清空      判空  表长 取元      定位  前驱 后继      插入 遍历;在此为了好记我分别二字短语三三结合 ,接下来会一一解释。 头文件和...
  • WLxinliang
  • WLxinliang
  • 2016年10月14日 23:00
  • 3040

对线性链表的完整操作(1)

#include #include #define MaxSize 50 typedef int ElemType; ///////////////////////////////////...
  • mycomputerxiaomei
  • mycomputerxiaomei
  • 2012年08月25日 20:40
  • 431

数据结构 线性链表的创立及其基本操作初始化、遍历、销毁、判空、求表长、删除、插入等

最近写了个数据结构的单链表,其中包括十来个基本操作算法,包括了创建单链表、删除、插入、定位、遍历等基本的操作。在VS上运行了一下,可以通过,感觉还不错,和大家分享一下! 我是建立了一个C++项目,在项...
  • wys_NO1
  • wys_NO1
  • 2016年10月24日 21:30
  • 469

C++实现线性链表的基本操作

C++实现顺序结构线性表的基本操作
  • sinat_34474705
  • sinat_34474705
  • 2017年01月10日 13:55
  • 1500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性链表的操作
举报原因:
原因补充:

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