您的位置:首页 > 其它

已知线性表中的元素(整数)以值递增有序排列,并以单链表做存储结构。试写一个程序,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素)。

2018-12-08 21:03 2041 查看

#include <stdio.h>

#include <stdlib.h>

#define ERROR -1

#define MAXSIZE 5

#define OVERFLOW -1

#define OK 1

#define listIncrement 2

#define num_stop -1

typedef int elemType;

 

typedef struct

{

       elemType *elem;

       int length;

       int listsize;

}Sqlist;

int initList(Sqlist &list)

{

       list.elem=new int[MAXSIZE];

       if(!list.elem)

              exit(OVERFLOW);

       list.length=0;

       list.listsize=MAXSIZE;

       return OK;

}

int ListInsert(Sqlist &list,int i,int num)

{

       int *newbase;

       if(i<1)return ERROR;

       if(list.length==list.listsize)//即将超越数组大小时重新动态分配数组大小

       {

              newbase=(int*)realloc(list.elem,(list.listsize+listIncrement)*sizeof(int));

              if(!newbase)

                     exit(OVERFLOW);

              list.elem=newbase;

              list.listsize+=listIncrement;

       }

       list.elem[i-1]=num;

       ++list.length;

       return OK;

}

void printList(Sqlist list)/*用于测试数据是否存储入顺序表*/

{

       for(int k=0;k<list.length;k++)

              printf("%d ",list.elem[k]);

}

void deleteList(Sqlist &list,int num)

{

       int len=list.length;

       elemType *str=list.elem;

       int front=0;

       while(front<len)

       {

              while(front<len && str[front]!=num)

                     front++;//值不为num时,指针右移,为从顺序表开头一直顺数到为num的元素

              if(front<len)

                     while(front<len && str[len]==num)

                            len--;//为需要删除的数字时,线性表长度减1,为从顺序表尾部删除尾部连续的为num的元素

              if(front<len)

              {

                     str[front]=str[len-1];//题目仅要求删去值为num的元素,并未要求元素顺序排列不变,因此大胆猜想将靠后的元素往前移动

                     front++;//前指针右移

                     len--;//后指针左移

                     list.length--;//变换一次,顺序表长度-1

              }

       }

}

int main()

{

       Sqlist list1;

       int flag;

       int num,count=0;

       flag=initList(list1);

       printf("请输入若干数字,并以%d结束:",num_stop);

       scanf("%d",&num);

       count++;

       while(num!=-1)

       {

              flag=ListInsert(list1,count,num);

              scanf("%d",&num);

              count++;

       }

       printList(list1);printf("\n");

       printf("需要删除的数字为:");

       scanf("%d",&num);

       deleteList(list1,num);

       printf("删除后的线性表为:");

       printList(list1);

       printf("\n");

       return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐