打印
[经验分享]

C语言线性表的顺序存储结构

[复制链接]
443|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vivilyly|  楼主 | 2023-12-5 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


#include <stdio.h>
#include <stdlib.h>

// 线性表的顺序存储结构
#define ListSize 100
typedef char DataType;
typedef struct{
        DataType data[ListSize];
        int length;
}SeqList;

SeqList mylist;//global value

//在指定位置插入元素
void InsertList(SeqList *L,int pos,DataType val)
{
        int i,q=0;
        if(pos<1 || pos>L->length+1) //   假如顺序表为 1,2,3,4,5,可以插入的位置是1,2,3,4,5,6
        {
                printf("position error\n");
                return;
        }
        if(L->length>=ListSize){   //当length=ListSize时,表示顺序表已满
                printf("overflow\n");
                return;
        }
        
        for( i=L->length ;i>=pos;i--){  //当i的位置为1——length+1时需要移动length-i+1
                L->data[i]=L->data[i-1];
                q++;
        }
        L->data[pos-1]=val;
        printf("循环体执行了%d次,理论上计算值为n-i+1次%d\n",q,L->length-pos+1);
        L->length ++;
        printf("在顺序表中插入新的元素%c在表中%d的位置",val,pos);
        
}
DataType  DeleteList(SeqList *L,int pos)//在顺序表L中第i个位置之前插入一个新的元素下
{
        int i,q=0;  
        DataType x;
        if(pos<1 || pos>L->length)
        {
                printf("position error\n");
                exit (0); //程序非正常退出,并给一个统一的返回值0,在stdlib.h中有定义
        }
        x=L->data[pos-1];

/*        for(i=pos-1;i+1<L->length ;i++){
                q++;
                L->data[i]=L->data[i+1];
               
        }
*/        
        
        for(i=pos;i<L->length;i++) {
                q++;
                L->data[i-1]=L->data[i];
        }
        
        L->length --;
        printf("表中位置%d的元素%c已经被删除了\n",pos,x);
        printf("循环体执行了%d次,理论上计算值为n-i次%d\n",q,L->length+1-pos);
        return x;
}

void PrintList(SeqList *L)   //打印输出顺序表
{
        int i;
        for(i=0;i<L->length;i++){
                printf("%c,",L->data[i]);
        }
        printf("\n");
}
//创建一个顺序表
CreateList(SeqList *L)
{
        int i=0;
        L->length=0;
        char ch;
        ch=getchar();
        printf("创建的顺序表如下:");
                while(ch!='\n'){
                        L->data[i]=ch;
                        
                        L->length++;
                        
                        ch=getchar();
                        printf("%c,",L->data[i]);
                        i++;
                }
                printf("表长length=n=%d\n",L->length);
}
//顺序表逆置
void Converts(SeqList *L){
        int i;
        DataType temp;
        for(i=0;i<L->length/2;i++)
        {
                temp=L->data[i];
                L->data[i]=L->data[L->length-1-i];
                L->data[L->length-1-i]=temp;
               
        }
        return;
}
void MaxMin(SeqList *L,DataType*max,DataType *min,int *k,int *j){
        int i;
        *max=L->data[0];*min=L->data[0];
        *k=*j=0;
        for(i=1;i<L->length;i++) {
                if(L->data[i]>*max){
                        *max=L->data[i];*k=i;
                }
                        
                else if (L->data[i]<*min){
                        *min=L->data[i];*j=i;
                }
                        
        }
}

int main()
{
        
        int max=0,min=0,k=0,j=0;
        
        
        CreateList(&mylist);
        InsertList(&mylist,9,'A');
        PrintList(&mylist);
        DeleteList(&mylist,9);
        PrintList(&mylist);
        Converts(&mylist);
        PrintList(&mylist);
        MaxMin(&mylist,&max,&min,&k,&j);
        printf("max=%c,min=%c,k=%d,j=%d",max,min,k,j);
        return 0;
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

1655

帖子

0

粉丝