C语言 统计线性表中元素的个数,int ListLength(struct Sqlist MyLi

作者&投稿:禄采 (若有异议请与网页底部的电邮联系)
C语言 读取线性表中的第i个元素,GetElem(struct Sqlist MyList, in~

struct Sqlist {ElemType data;struct Sqlist *next;};void GetElem(struct Sqlist MyList,int i,ElemType *e){ struct Sqlist *p=MyList->next; int n=0; while(p){ p=p->next;n++; } p=MyList->next; for(int j=0;jnext; *e=p->data;}

#include
#include
# define MaxSize 50
typedef struct{
ElemType data[MaxSize];//存放顺序表元素
int length;//存放顺序表长度
}SqList;//顺序表类型定义
//建立顺序表
void CreateList(SqList *&L,ElemType a[],int n){
int i;
for(i=0;i<n;i++){
L->data [i]=a[i];
}
L->length =n;
}
//顺序表基本运算算法
//初始化线性表InitList(L)
void InitList(SqList *&L){
L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
L->length =0;
}//本算法的时间复杂度为O(1)
//销毁线性表
void DestroyList(SqList *&L){
free(L);
}//本算法的时间复杂度为O(1)
//判断线性表是否为空
int ListEmpty(SqList *L){
return (L->length ==0);
}//本算法的时间复杂度为O(1)
//求线性表的长度
int ListLength(SqList *L){
return (L->length);
}//本算法的时间复杂度为O(1)
//输出线性表
void DispList(SqList *L)
{
int i;
if(ListEmpty(L)) return;
for(i=0;ilength;i++){
printf(nn,L->data[i]);
}
printf("
");
}//本算法的时间复杂度为O(L->length)
//求线性表中某个数据的元素值
int GetElem(SqList *L,int i,ElemType &e)
{
if(iL->length)
return 0;
e=L->data[i-1];//这儿体现了数组的优点,可以直接通过下标访问
return 1;
}//本算法的时间复杂度为O(1)
//按元素的值查找
int LocateElem(SqList *L,ElemType e){
int i=0;
while(ilength && L->data[i]!=e)i++;
if(i>=L->length)
return 0;
else
return i+1;
}//本算法中基本运算为while循环中的i++语句,故时间复杂度为O(L->length)
//插入数据元素
int ListInsert(SqList *&L,int i,ElemType e){
int j;
if(iL->length+1)
return 0;//参数错误,返回0
i--;//将顺序逻辑位序变为物理位序
for(j=L->length;j>i;j--){
L->data[j]=L->data[j-1];//将data[i]及后面的元素后移一个位置
}
L->data[i]=e;//插入元素e
L->length++;//增加长度
return 1;
}//本算法的平均时间复杂度为O(n)
//删除数据元素
int ListDelete(SqList *&L,int i,ElemType &e){
int j;
if(iL->length)
return 0;
i--;//将顺序逻辑位序变为物理位序
e=L->data[i];
for(j=i;jlength-1;j++){
L->data[j]=L->data[j+1];//将data[i]之后的元素前移一个位置,这就是数组中的删除思想
}
L->length--;
return 1;
}//本算法的平均时间复杂度为O(n)

线性表可以直接用malloc申请连续空间,按数组保存。但这样不方便后期增删。
所以,建议使用链表来实现。
下面代码就是用链表实现线性表。
其中initList函数是生成了一个10节点的单向链表作为线性表。
ListLength就是题目要的函数。(函数中顺带打印了链表内容,你不想要显示链表内容,就删掉printf语句)。

#include<stdio.h>
#include<malloc.h>
struct Sqlist
{
    int num;
    struct Sqlist *next;
};
struct Sqlist *initList();//初始化一个线性链表
int ListLength(struct Sqlist MyList);
int main()
{
    struct Sqlist *mylist;
    mylist=initList();
    printf("
线性表中元素个数为:%d
",ListLength(*mylist));
    return 0;
}
int ListLength(struct Sqlist MyList)
{
    int cnt=0;
    struct Sqlist *headList=&MyList;
    printf("生成的线性表各元素值为:");
    while(headList)
    {
        printf("%d ",headList->num);
        cnt++;
        headList=headList->next;
    }
    return cnt;
}

struct Sqlist *initList()
{
    int i;
    struct Sqlist *newList=NULL,*firstList=NULL,*lastList=NULL;
    for(i=1;i<=10;i++)
    {
        newList=(struct Sqlist *)malloc(sizeof(struct Sqlist));
        if(!newList)
            return NULL;
        newList->num=i;
        newList->next=NULL;
        if(!firstList)
            firstList=newList;
        else
            lastList->next=newList;
        lastList=newList;
    }
    return firstList;
};



城西区15786319629: 统计线性表中元素的个数,int ListLength(struct Sqlist MyList), -
单于之林可: len = sizeof(arr)/sizeof(arr[0])

城西区15786319629: C语言 统计数组每个元素个数 -
单于之林可: void test() {srand((int)time(0));int i, j;int a[100];for( i=0; i<100; i++){a[i] = (int)(rand() * 10.0 / RAND_MAX); //随机数限定在0~10之间更能看出效果}//排序for( i=0; i<99; i++){for(j=i; j<100; j++){if(a[i]> a[j]){int temp = a[i];a[i] = a[j];a[j] = ...

城西区15786319629: 在C语言统计一维数组a中素数的个数 -
单于之林可: #include <math.h> #include <conio.h> #include <stdio.h> prinum( int a[] )//函数应该有个返回值 int prinum( int a[] ) { int count,i,j,k; count = 0; for ( i=0; i<10; i++) { k=a[i]-1; for ( j=2; j<=k; j++) if (a[i] % j == 0) break; if(j >= k+1)count++; } /************found...

城西区15786319629: 试写一算法 统计单链表中元素个数 数据结构一塌糊涂 用C语言写算法 求解 -
单于之林可: 见下列代码,size()函数返回元素个数.这里省略l了插入和删除#include"iostream.h" struct Node { int Data; Node*next; }; class list { Node*head; public:list(){head=NULL;} int size(); }; int list::size() { int i=0; Node*current=head; while(current!=NULL) { i++; current=current->next; return i; } }

城西区15786319629: C语言求救:统计素数个数 -
单于之林可: #include#include void main(){ int n,i,j,ri,flag,num; scanf("%d",&n); num=0; for(i=2;i<=n;i++) { flag=1; ri=int(floor(sqrt(1.0*i))); for(j=2;j<=ri;j++) { if(i%j==0) { flag=0; break; } } if(flag)num++; } printf("%d",num); }

城西区15786319629: C语言 读取线性表中的第i个元素,GetElem(struct Sqlist MyList, in -
单于之林可: struct Sqlist { ElemType data; struct Sqlist *next; }; void GetElem(struct Sqlist MyList,int i,ElemType *e) {struct Sqlist *p=MyList->next;int n=0;while(p){p=p->next;n++;}p=MyList->next;for(int j=0;j<n-i;j++)p=p->next;*e=p->data; }

城西区15786319629: 线性表的操作(C语言) -
单于之林可: //---------------------------------------------------------------------------#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(...

城西区15786319629: C语言统计字符中各元素的个数 -
单于之林可: scanf("%c",Shmily[100]); 这句错了 该成 scanf("%s",Shmily);

城西区15786319629: 返回线性表L中属于元素个数的函数对么? -
单于之林可: 这个函数用于统计表中元素不为0的结点个数,但是应该考虑一下表是否已经结束,为此修改如下:int ListLength(struct student *head) { struct student *p1; int i=0; p1=head; p1=p1->next; while(p1)/*注意这里,p1用于检测有没有到结尾*/ { if (p1->num) i++;/*注意这里,检测是否为0的部分应该放在循环内部*/ p1=p1->next; } return i; }

城西区15786319629: C语言编写函数,统计字符串中数字字符的个数 -
单于之林可: #include<stdio.h> #include<string.h> main() {int i,j=0,k;char a[1000];//长度自己根据实copy际情况调bai整printf("请输入一串字符串:du\n");gets(a);k=strlen(a);for(i=0;i<k;i++)if('0'<=a[i]<='9')j++;printf("这串zhi字符串中数字dao字符有%d个!\n",j); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网