一只老甲鱼 发表于 2020-11-5 23:06:45

创建顺序表实现插入和删除,每次只删除一个元素,插入或删除后都要输出线性表元素一遍

以下是我的代码,请求大佬们帮助
#include <stdio.h>
#include <stdlib.h>
#define M 30
typedef struct Linear_List
{
        int list;
        int len;
}Linear_List_Type;
void DeleteList(Linear_List_Type * p, int i);
void InsertList(Linear_List_Type * p, int m, int i, int b);
void printList(Linear_List_Type * p);
void main()
{
int i,b,flag,m=30;
Linear_List_Type *p;
p->len=0;
while(1)
{
while(1)
{int flag;
printf("请输入要插入的地方");
scanf("%d",&i);
printf("请输入要插入数据个数:");
scanf("%d",&b);
p->len=p->len+b;
InsertList (p,m,i,b);
printList(p);
printf("停止插入请输入0");
scanf("%d",&flag);
if(0==flag)
goto DEL;
}
DEL:
while(1)
{
int flag;
printf("请输入要删除的地方");
scanf("%d",&i);
DeleteList (p,i);
p->len-=1;
printf("停止删除请输入0");
scanf("%d",&flag);
DeleteList (p,i);
printList(p);
if(0==flag)
goto OUT;
}
OUT:
printf("退出程序输入0");
scanf("%d",&flag);
if(0==flag)
exit(0);
}
}
void InsertList (Linear_List_Type * p, int m, int i, int b)
{
        int k;
        if(p->len == m){
          printf(" overflow!\n ");
                return;
        }
        if(i > p->len){
                i = p->len + 1;
        }else if( i < 1)
                i = 1;
        for(k = p->len; k >= i; k--)
                p->list = p->list;
       p->list = b;
       p->len += 1;
}
void DeleteList (Linear_List_Type * p, int i)
{
        int k;
        if(p->len == 0){
                printf(" underflow !\n ");
                return;
        }
        if((i < 1) || (i > p->len)){
                printf(" This element is not in the list!\n ");
        }
        for(k = i; k < p->len; k++)
                p->list = p->list;
        p->len= p->len -1;
        return;
}
void printList(Linear_List_Type * p)
{
        int j;
printf("表中的内容是:");
    for( j=0; j< p->len; j++)
    {
      printf("%d",p->list);
    }
        printf("\n");
}

一只老甲鱼 发表于 2020-11-5 23:49:52

#include <stdio.h>
#include <stdlib.h>
#define M 30
typedef struct Linear_List
{
        int list;
        int len;
}Linear_List_Type;
void DeleteList(Linear_List_Type * p, int i);
void InsertList(Linear_List_Type * p, int m, int i, int b);
void printList(Linear_List_Type * p);
void main()
{
int i,b,n,flag,m=30;
Linear_List_Type p;
(&p)->len=0;
while(1)
{
while(1)
{
printf("请输入要插入的地方:\n");
scanf("%d",&i);
printf("请输入要插入数据个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入要插入的值:");
scanf("%d",&b);
InsertList (&p,m,i,b);
printList(&p);
}
printf("停止插入请输入0:\n");
scanf("%d",&flag);
if(0==flag)
goto DEL;
}
DEL:
while(1)
{
printf("请输入要删除的地方:");
scanf("%d",&i);
DeleteList (&p,i);
printList(&p);
printf("停止删除请输入0:\n");
scanf("%d",&flag);
if(0==flag)
goto OUT;
}
OUT:
printf("退出程序输入0:\n");
scanf("%d",&flag);
if(0==flag)
exit(0);
}
}
void InsertList (Linear_List_Type * p, int m, int i, int b)
{
        int k;
        if(p->len == m){
          printf(" overflow!\n ");
                return;
        }
        if(i > p->len){
                i = p->len + 1;
        }else if( i < 1)
                i = 1;
        for(k = p->len; k >= i; k--)
                p->list = p->list;
       p->list = b;
       p->len += 1;
}
void DeleteList (Linear_List_Type * p, int i)
{
        int k;
        if(p->len == 0){
                printf(" underflow !\n ");
                return;
        }
        if((i < 1) || (i > p->len)){
                printf(" This element is not in the list!\n ");
        }
        for(k = i; k < p->len; k++)
                p->list = p->list;
        p->len= p->len -1;
        return;
}
void printList(Linear_List_Type * p)
{
        int j;
printf("表中的内容是:");
    for( j=0; j< p->len; j++)
    {
      printf("%d",p->list);
    }
        printf("\n");
}
我自己解决了,让大家见笑了
页: [1]
查看完整版本: 创建顺序表实现插入和删除,每次只删除一个元素,插入或删除后都要输出线性表元素一遍