求线性表的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://scyingshan.cn/article/ddjcihi.html