线性表基础运算函数c语言 线性表基础运算函数c语言表示

线性表的操作(C语言)

//---------------------------------------------------------------------------

成都创新互联公司主营河西网站建设的网络公司,主营网站建设方案,重庆APP开发公司,河西h5重庆小程序开发公司搭建,河西网站营销推广欢迎河西等地区企业咨询

#include stdio.h

#include stdlib.h

#include time.h

#define STY "%d"/*元素类型格式符*/

typedef int eltp;/*元素类型*/

typedef struct node{

eltp data;

struct node *next;

} node;

void init(void)

{

static int fg=1;

if (fg) {

srand(time(NULL));

fg=0;

}

}

node *insert(node *h,eltp d)

{

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

if (!h) {

s-data=d;

s-next=NULL;

h=s;

}

else {

h-next=insert(h-next,d);

}

return h;

}

node *create(int n)

{

node *h=NULL;

int i;

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

h=insert(h,rand()%100);

}

if (h) {

printf("线性表生成已完成!\n");

}

else {

fprintf(stderr,"线性表生成未成功\n");

exit(-1);

}

return h;

}

node *del(node *h,eltp d)

{

node *p;

if (hh-data==d) {

p=h;

h=h-next;

free(p);

}

else if (h) h-next=del(h-next,d);

return h;

}

int search(node *h,eltp d)

{

int i=1;

while (hh-data!=d)

{

h=h-next;

i++;

}

if (!h) i=-1;

return i;

}

int count(node *h)

{

int i=0;

for (i = 0; h; i++) {

h=h-next;

}

return i;

}

void prt(node *h)

{

while (h)

{

printf(STY"\t",h-data);

h=h-next;

}

putchar('\n');

}

void Free(node **h)

{

if (*h) {

Free((*h)-next);

free(*h);

*h=NULL;

}

}

int menu(void)

{

int i;

puts("******************");

puts("1.生成线性表");

puts("2.输出表元素");

puts("3.删除表元素");

puts("4.查找表元素");

puts("5.统计表元素");

puts("6.插入表元素");

puts("7.删除线性表");

puts("0.退出本程序");

puts("******************");

printf("请选择:");

scanf("%d",i);

return i;

}

void find(node *h)

{

eltp a;

//node *t=NULL;

int index;

printf("请输入要查找的数字:");

scanf(STY,a);

index=search(h,a);

if (index!=-1) {

printf(STY"是表中的第%d个元素\n",a,index);

}

else printf(STY"不是表中的元素\n",a);

}

node *insert_node(node *h,int index,eltp a)

{

node *hd=h,*in=(node *)malloc(sizeof(node));

int i;

in-data=a;

if (index1) {

for (i=1; h-nextiindex-1; i++) {

h=h-next;

}

in-next=h-next;

h-next=in;

}

else {

in-next=hd;

hd=in;

}

return hd;

}

node *remove_node(node *h)

{

eltp a;

printf("请输入要删除的元素:");

scanf(STY,a);

h=del(h,a);

puts("已完成");

return h;

}

node *ins(node *h)

{

eltp a;

int i;

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

scanf(STY,a);

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

scanf("%d",i);

return insert_node(h,i,a);

}

int main(void)

{

node *head=NULL;

int ch;

init();

do

{

ch=menu();

switch (ch) {

default:printf("输入有误,重新输入\n");break;

case 0:break;

case 1:if(head) Free(head);

head=create(10);

break;

case 2:prt(head);break;

case 3:head=remove_node(head);break;

case 4:find(head);break;

case 5:printf("表中共有%d个元素\n",count(head));break;

case 6:head=ins(head);break;

case 7:Free(head);break;

}

}while (ch);

Free(head);

return 0;

}

//---------------------------------------------------------------------------

求线性表的C语言程序

第一个文件commom.h

#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语言 线性表的实现

typedef int datatype;

#define maxsize 1024

typedef struct

{ ElemType data[MaxSize];

int length;

}SqList;

void InitList(SqList L)

{ L.length=0;

}

int GetLength(SqList L)

{return L.length;

}

int GetElem(SqList L,int i,ElemType e)

{ if (i1||iL.length)

return 0;

else

{ e=L.data[i-1];

return 1;

}

}

int Locate(SqList L,ElemType x)

{int i=0;

while (L.data[i]!=x)

i++;

if (iL.length)

return (0);

else

return(i+1);

}

int InsElem(SqList L,ElemType x,int i)

{ int j;

if(i1||iL.length+1)

return 0;

for(j=L.length;ji;j--)

L.data[j]=L.data[j-1];

L.data[i-1]=x;

L.length++;

return 1;

}

int DelElem(SqList L,int i)

{ int j;

if(i1||iL.length)

return 0;

for(j=i;jL.length;j++)

L.data[j-1]=L.data[j];

L.length--;

return 1;

}void DispList(SqList L)

{ int i;

for(i=1;i=L.length;i++)

printf("%c",L.data[i-1]);

printf("\n");

}

void main()

{ int i;

ElemType e;

SqList L;

InitList(L);

InsElem(L,'a',1);

InsElem(L,'c',2);

InsElem(L,'a',3);

InsElem(L,'e',4);

InsElem(L,'d',5);

InsElem(L,'b',6);

printf("xian xing biao:");DispList(L);

printf("chang du:%d\n",GetLength(L));

i=3;GetElem(L,i,e);

printf("di %d ge yuan su :%c\n",i,e);

e='a';

printf("yuan su %c shi di %d ge yuan su\n",e,Locate(L,e));

i=4;printf("shan chu di %d ge yuan su\n",i);

DelElem(L,i);

printf("xian xing biao:");DispList(L);

}


文章标题:线性表基础运算函数c语言 线性表基础运算函数c语言表示
网站链接:http://hbruida.cn/article/dosgpdc.html