线性链表的操作

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

相关文章推荐

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

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

线性链表的基本操作

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

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

#include #include #define MaxSize 50 typedef int ElemType; ///////////////////////////////////...

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

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

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

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

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

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

list 线性链表的相关操作。

线性链表的操作比较简单,只需要在内存的堆中进行动态申请空间分配给相应的变量即可。另外,需要一个头指针来保存住这样链表的首地址,这样的话可以在对已经创建好的线性链表进行操作时,能够找到。如果没有头结点,...

创建单线性链表的不同表示方法和操作

创建单线性链表,常见的有头插法、尾插法创建线性链表,常见的操作有:创建链表、查找、删除、增加元素、求逆链等操作。 这里首先才有头插法创建链表: //头指针唯一确定一个单链表 #define Max...
  • wqthaha
  • wqthaha
  • 2014年08月04日 16:03
  • 1222

项目1:线性链表的基本操作

#include #define ok 1 #define error 0 using namespace std; typedef int Status; typedef int ElemType...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性链表的操作
举报原因:
原因补充:

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