【数据结构学习】线性表

来源:互联网 发布:引力波爱因斯坦知乎 编辑:程序博客网 时间:2024/06/05 10:16

程序要求:建立一个顺序表,用户通过输入个数和一组非递减顺序的数,即顺序表按照非递减顺序排列,对顺序表进行建立,删除指定位置的数,查找指定位置的数,插入一个数字功能。程序代码如下:

#include "stdio.h"#include "stdlib.h"#define listsize 100typedef struct{    int data[listsize];    int length;}Seqlist;void main(){    void createlist(Seqlist *l,int n);    void printlist(Seqlist *l,int n);    void locateElem(Seqlist *l,int n);    void listinsert(Seqlist *l,int i,int n);    void listdelete(Seqlist *l,int i,int n);    int n;    int i=0;    Seqlist l;    l.length=0;    printf("请输入线性表长度:");    scanf("%d",&n);    createlist(&l,n);    printlist(&l,n);    locateElem(&l,n);    listinsert(&l,i,n);    listdelete(&l,i,n);    printf("\n");}//新建顺序表void createlist(Seqlist *l,int n){    int i;    printf("请输入顺序表元素:\n");    for(i=0;i<n;i++)    {        scanf("%d",&l->data[i]);        l->length=n;    }}//输出顺序表void printlist(Seqlist *l,int n){    int i;    printf("顺序表为:");    for(i=0;i<n;i++)    {        printf("%d ",l->data[i]);    }}//查找元素void locateElem(Seqlist *l,int n){    int i=1,*p;    p=l->data;    printf("\n请输入要查找的元素n:");    scanf("%d",&n);    while(i<=l->length&&(*p++!=n)) ++i;    if(i<=l->length)    printf("要查找的数的位置为:%d",i);}//插入元素void listinsert(Seqlist *l,int i,int n){    int *q,*p;    printf("\n请输入要插入的数:");    scanf("%d",&n);    if(l->length==0)    {        l->data[0]=n;        ++l->length;    }    q=&(l->data[0]);    while((*q<=n)&&(q<=&(l->data[l->length-1])))    {        ++q;    }    ++l->length;    for(p=&(l->data[l->length-1]);p>=q;--p)    {    *(p+1)=*p;     *p=n;     } printf("输出新表:\n");          for(i=0;i<l->length;i++)     {        printf("%d ",l->data[i]);     }}//删除元素void listdelete(Seqlist *l,int i,int n){    int *p,*q;    printf("\n请输入要删除的数的位置:");    scanf("%d",&i);       if(i<1||i>l->length)    printf("删除元素失败!");    p=&l->data[i-1];    n=*p;    q=l->data+l->length-1;    for(++p;p<=q;++p)    {         *(p-1)=*p;         --l->length;       }    for(i=0;i<l->length+1;i++)    {        printf("%d ",l->data[i]);    }}
原创粉丝点击