顺序表的删除操作

  • 格式:doc
  • 大小:82.00 KB
  • 文档页数:6

作业1
1、编写一个函数deleteV_seq( PSeqList palist , int x),在palist所指的顺序表中,删除一个
值为x的元素,返回成功与否的标志。
#include"stdio.h"
#include"stdlib.h"
/*表palist的结构体类型*/
typedef struct node {
int data[100];
int length;
}*pseqlist,seqlist;

/*表palist的初始化函数*/
void Init_palist(seqlist *p)
{
int i,n,k;
if(p)
p->length=0;
printf("please enter the sum of the number:\n");
scanf("%d",&n);
printf("please enter %d numbers:\n",n);
for(i=0;i{
scanf("%d",&k);
p->data[i]=k;
p->length++;
}
printf("\n");
printf("The length of the list is: %d\n",p->length);
printf("\n");
}

/*表palist的检索函数*/
int locate_palist(pseqlist palist,int x)
{
int i=0;
while(i>=palist->length&&palist->data[i]!=x)
{
i++;
}
if(i>=palist->length)
{
printf("%d not in the list\n",x);
return 0;
}
return i;
}

/*表palist的删除函数*/
delete_seq(pseqlist palist,int x)
{
int i,j;
if(!palist&&palist==NULL)
{
printf("the list of palist is not existed or palist is empty\n");
return -1;
}
i=locate_palist(palist,x);
for(j=i;jlength;j++)
{
palist->data[j-1]=palist->data[j];
}
palist->length--;
printf("the list after delete: %d\n",x);
for(i=0;ilength;i++)
printf("%3d",palist->data[i]);
return 1;
}

main()
{ seqlist palist;
int x,k;
Init_palist(&palist);
printf("please enter the number you want to delete:\n");
scanf("%d",&x);
k=x;
delete_seq(&palist,k);
getch();
}
2、已知list是指向无头结点的单链表的指针变量,写出删除该链表中从第i个结点开始的
连续k个结点的算法。
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
typedef struct node {
int data;
int length;
struct node *next;
}lnode,*list;
list Init_del(void)
{
list PL;
PL=(list)malloc(sizeof(lnode));
if(!PL)
{
printf("The place is unaployed!\n");
return 0;
}
PL->next=NULL;
return PL;
}
Create_del(list PL)
{
list p,q;
p=PL;
printf("please enter the elements:\n");
/*q=(list)malloc(sizeof(lnode));
scanf("%d",q->data);*/
do
{ q=(list)malloc(sizeof(lnode));
scanf("%d",q->data);
PL->length++;
q->next=p->next;
p->next=q;
p=q;

}while(q->data==0);
printf("The length of the list is:%d\n",PL->length);
printf("\n\n");
return 3;
}
int Delete_delk(list Delk,int k)
{
int i,j=0;
list p,q,r;
printf("please enter the sum of elements you want to delete:\n\n");
printf("\n");
scanf("%d",&i);
while(i+k>=Delk->length)
{
printf("The sum of deleted elements is too big,please enter it again!\n\n");
scanf("%d",&i);
}
p=Delk;
while(j{
q=p;
p=p->next;
j++;
}
if(j>=Delk->length)
{
printf("Delete place is unreasonable!\n");
return -1;
}
while(i!=0)
{
q->next=p->next;
r=p->next;
free(p);
p=r;
i--;
Delk->length--;
}
return 2;
}
int Print_delk(list DL)
{
list p;
if(!DL)
{
printf("The list is not exist!\n");
return -2;
}
p=DL->next;
while(p->next!=NULL)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n\n\n");
return 0;
}
main()
{
int i;
lnode Delk;
printf("******************* Welcome to use the software!
**************\n\n");
Init_del();
Create_del(&Delk);
Print_delk(&Delk);

printf("please enter the first element's number you want to delete:\n\n");
scanf("%d",&i);
printf("\n");
Delete_delk(&Delk,i);
printf("The rest elements of the list:\n\n");
Print_delk(&Delk);
return 1;
}
要求:请大家将算法上机调试通过,然后将程序复制到题目后,并将程序运行结果抓图到
程序后。