线性表基础运算函数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