c语言调用线性表函数 用c语言编写线性表的结构定义

求线性表的C语言程序

第一个文件commom.h

10多年的阿图什网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整阿图什建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“阿图什网站设计”,“阿图什网站推广”以来,每个客户项目都认真落实执行。

#include stdio.h

#include stdlib.h

#include malloc.h

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

第二个文件seqlist.h

#define ElemType int

#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/

typedef struct

{

ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/

int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/

}SeqList;

第三个文件locate.cpp

#include "common.h"

#include "seqlist.h"

int Locate(SeqList L, ElemType e)

{

int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/

while ((i=L.last)(L.elem[i]!=e)) /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/

i++;

if (i=L.last)

return(i+1); /*若找到值为e的元素,则返回其序号*/

else

return(-1); /*若没找到,则返回空序号*/

}

void main()

{

SeqList l;

int p,q,r;

int i;

printf("请输入线性表的长度:");

scanf("%d",r);

l.last = r-1;

printf("请输入线性表的各元素值:\n");

for(i=0; i=l.last; i++)

{

scanf("%d",l.elem[i]);

}

printf("请输入要查找的元素值:\n");

scanf("%d",q);

p=Locate(l,q);

if(p == -1)

printf("在此线性表中没有该元素!\n");

else

printf("该元素在线性表中的位置为:%d\n",p);

}

第四个文件InsList.cpp

#include "common.h"

#include "seqlist.h"

/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L-last+1,

i的合法取值范围是 1≤i≤L-last+2 */

int InsList(SeqList *L,int i,ElemType e)

{

int k;

if((i1) || (iL-last+2)) /*首先判断插入位置是否合法*/

{

printf("插入位置i值不合法");

return(ERROR);

}

if(L-last= MAXSIZE-1)

{

printf("表已满无法插入");

return(ERROR);

}

for(k=L-last;k=i-1;k--) /*为插入元素而移动位置*/

L-elem[k+1]=L-elem[k];

L-elem[i-1]=e; /*在C语言数组中,第i个元素的下标为i-1*/

L-last++;

return(OK);

}

void main()

{

SeqList *l;

int p,q,r;

int i;

l=(SeqList*)malloc(sizeof(SeqList));

printf("请输入线性表的长度:");

scanf("%d",r);

l-last = r-1;

printf("请输入线性表的各元素值:\n");

for(i=0; i=l-last; i++)

{

scanf("%d",l-elem[i]);

}

printf("请输入要插入的位置:\n");

scanf("%d",p);

printf("请输入要插入的元素值:\n");

scanf("%d",q);

InsList(l,p,q);

for(i=0; i=l-last; i++)

{

printf("%d ",l-elem[i]);

}

}

第五个文件DelList.cpp

#include "common.h"

#include "seqlist.h"

int DelList(SeqList *L,int i,ElemType *e)

/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */

{

int k;

if((i1)||(iL-last+1))

{

printf("删除位置不合法!");

return(ERROR);

}

*e = L-elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/

for(k=i; i=L-last; k++)

L-elem[k-1] = L-elem[k]; /*将后面的元素依次前移*/

L-last--;

return(OK);

}

void main()

{

SeqList *l;

int p,r;

int *q;

int i;

l = (SeqList*)malloc(sizeof(SeqList));

q = (int*)malloc(sizeof(int));

printf("请输入线性表的长度:");

scanf("%d",r);

l-last = r-1;

printf("请输入线性表的各元素值:\n");

for(i=0; i=l-last; i++)

{

scanf("%d",l-elem[i]);

}

printf("请输入要删除的元素位置:\n");

scanf("%d",p);

DelList(l,p,q);

printf("删除的元素值为:%d\n",*q);

}

第六个文件merge.cpp

#include "common.h"

#include "seqlist.h"

void merge(SeqList *LA, SeqList *LB, SeqList *LC)

{

int i,j,k;

i=0;j=0;k=0;

while(i=LA-lastj=LB-last)

if(LA-elem[i]=LB-elem[j])

{

LC-elem[k]= LA-elem[i];

i++;

k++;

}

else

{

LC-elem[k]=LB-elem[j];

j++;

k++;

}

while(i=LA-last) /*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/

{

LC-elem[k]= LA-elem[i];

i++;

k++;

}

while(j=LB-last) /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/

{

LC-elem[k]= LB-elem[j];

j++;

k++;

}

LC-last=LA-last+LB-last+1;

}

void main()

{

SeqList *la,*lb,*lc;

int r;

int i;

la=(SeqList*)malloc(sizeof(SeqList));

printf("请输入线性表A的长度:");

scanf("%d",r);

la-last = r-1;

printf("请输入线性表A的各元素值:\n");

for(i=0; i=la-last; i++)

{

scanf("%d",la-elem[i]);

}

lb=(SeqList*)malloc(sizeof(SeqList));

printf("请输入线性表B的长度:");

scanf("%d",r);

lb-last = r-1;

printf("请输入线性表B的各元素值:\n");

for(i=0; i=lb-last; i++)

{

scanf("%d",lb-elem[i]);

}

lc=(SeqList*)malloc(sizeof(SeqList));

merge(la,lb,lc);

printf("合并后线性表C中的元素为:\n");

for(i=0; i=lc-last; i++)

{

printf("%d ",lc-elem[i]);

}

}

包含了线性表插入,查找,删除,合并运算。

数据结构 线性表 用c语言

#define MAXSIZE 100 //表中元素的最大个数

typedef int ElemType;//元素类型

typedef struct list{

ElemType elem[MAXSIZE];//静态线性表

int length; //表的实际长度

}SqList;//顺序表的类型名

线性表的操作,C语言

#include"stdio.h"

#includemalloc.h

typedef char ElemType;

typedef struct LNode

{ElemType data;

struct LNode *next;

}LinkList;

void CreatListF(LinkList *L,ElemType a[],int n) //头插法建表

{

LinkList *s;int i;

L=(LinkList *)malloc(sizeof(LinkList));

L-next=NULL;

for(i=0;in;i++)

{

s=(LinkList *)malloc(sizeof(LinkList));

s-data=a[i];

s-next=L-next;

L-next=s;

}

}

void CreateListR(LinkList *L,ElemType a[],int n) //尾插法建表

{

LinkList *s,*r;int i;

L=(LinkList *)malloc(sizeof(LinkList));

r=L;

for(i=0;in;i++)

{

s=(LinkList *)malloc(sizeof(LinkList));

s-data=a[i];

r-next=s;

r=s;

}

r-next=NULL;

}

void InitList(LinkList *L) //初始化线性表

{

L=(LinkList *)malloc(sizeof(LinkList));

L-next=NULL;

}

void DestroyList(LinkList *L) //销毁线性表

{

LinkList *p=L,*q=p-next;

while(q!=NULL)

{

free(p);

p=q;

q=p-next;

}

free(p);

}

int ListEmpty(LinkList *L) //判断线性表是否为空

{

return(L-next==NULL);

}

int ListLength(LinkList *L) //求线性表的长度

{

LinkList *p=L;int n=0;

while(p-next!=NULL)

{

n++;p=p-next;

}

return(n);

}

void DispList(LinkList *L) //输出线性表

{

LinkList *p=L-next;

while(p!=NULL)

{

printf("%c",p-data);

p=p-next;

}

}

int GetElem(LinkList *L,int i,ElemType e) //求线性表中某个数据元素值

{

int j=0;

LinkList *p=L;

while(jip!=NULL)

{

j++;p=p-next;

}

if(p==NULL)

return 0;

else

{

e=p-data;return 1;

}

}

int LocateElem(LinkList *L,ElemType e) //按元素值查找

{

LinkList *p=L-next;

int i=1;

while(p!=NULLp-data!=e)

{

p=p-next;i++;

}

if(p==NULL)return(0);

else return(i);

}

int ListInsert(LinkList *L,int i,ElemType e) //插入数据元素

{

int j=0;

LinkList *p=L,*s;

while(ji-1p!=NULL)

{

j++;p=p-next;

}

if(p==NULL)return 0;

else

{

s=(LinkList *)malloc(sizeof(LinkList));

s-data=e; s-next=p-next; p-next=s;

return 1;

}

}

int ListDelete(LinkList *L,int i,ElemType e) //删除数据元素

{

int j=0;

LinkList *p=L,*q;

while(ji-1p!=NULL)

{

j++;p=p-next;

}

if(p==NULL)

return 0;

else

{

q=p-next;

if(q==NULL)return 0;

e=q-data;

p-next=q-next;

free(q);

return 1;

}

}

int main()

{

ElemType e,a[5]={'a','b','c','d','e'};

LinkList *h;

InitList(h); //初始化顺序表h

CreateListR(h,a[0],5); //依次采用尾插入法插入a,b,c,d,e元素

printf("单链表为:");

DispList(h); printf("\n"); //输出顺序表h

printf("该单链表的长度为:");

printf("%d",ListLength(h)); printf("\n"); //输出顺序表h的长度

if(ListEmpty(h)) printf("该单链表为空。\n");

else printf("该单链表不为空。\n"); //判断顺序表h是否为空

GetElem(h,3,e);printf("该单链表的第3个元素为:");

printf("%c",e); printf("\n"); //输出顺序表h的第3个元素

printf("该单链表中a的位置为:");

printf("%d",LocateElem(h,'a')); printf("\n"); //输出元素'a'的位置

ListInsert(h,4,'f'); //在第4个元素位置插入'f'素

printf("在第4 个元素位置上插入'f'后单链表为:");

DispList(h); printf("\n"); //输出顺序表h

ListDelete(h,3,e); //删除L的第3个元素

printf("删除第3个元素后单链表为:");

DispList(h); printf("\n"); //输出顺序表h

DestroyList(h); //释放顺序表h

return 0;

}


网站标题:c语言调用线性表函数 用c语言编写线性表的结构定义
标题路径:http://ybzwz.com/article/ddjcihi.html