小白,多多包涵,提出建议,会改正!VC6.0环境。
缺点没考虑重复数字!
#include<stdio.h>
#include<malloc.h>
typedef int DataType;
typedef struct linknode
{
DataType data;
struct linknode *next;
}LinkList;
LinkList *InitList()
{
LinkList *head;
head=(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
return head;
}
void CreateListL(LinkList *head,int n)
{
LinkList *s,*last;
int i;
last=head;
printf("请输入%d个整数:",n);
for(i=0;i<n;i++)
{
s=(LinkList *) malloc(sizeof(LinkList));
scanf("%d",&s->data);
s->next=NULL;
last->next=s;
last=s;
}
printf("建立链表操作成功!");
}
int Locate(LinkList *head,DataType x)/*寻找位置*/
{
int j=1;
LinkList *p;
p=head->next;
while(p!=NULL && p->data!=x)
{
p=p->next;
j++;
}
if(p!=NULL)
printf("在表的第%d位找到值为%d的最大值结点!",j,x);
else
printf("错误");
return j;
}
void DelList(LinkList *head,int i)/*删除结点*/
{
int j=0;
DataType x;
LinkList *p=head,*s;
while(p->next!=NULL && j<i-1)
{
p=p->next;
j++;
}
if(p->next!=NULL && j==i-1)
{
s=p->next;
x=s->data;
p->next=s->next;
free(s);
printf("\n");
printf("删除第%d位上的元素%d成功!",i,x);
}
else
printf("删除结点的位置错误,删除失败!");
}
void DispList(LinkList *head)/*显示输出函数*/
{
LinkList *p;
p=head->next;
while(p!=NULL)
{
printf("%5d",p->data);
p=p->next;
}
}
int max(LinkList *head)
{
LinkList *p;
int x;
p=head->next;
x=p->data;
while(p->next!=NULL)
{
if(x < p->next->data)
x=p->next->data;
else
x=x;
p=p->next;
}
return x;
}
void main()
{
LinkList *head;
int n,j;
DataType m;
head=InitList();
printf("请输入要建立的线性表的长度:");
scanf("%d",&n);
CreateListL(head,n);
printf("建立后的线性表为:\n");
DispList(head);
m=max(head);
printf("\n");
j=Locate(head,m);
DelList(head,j);
printf("\n");
printf("删除最大值的元素后的线性表为:\n");
DispList(head);
printf("\n");
}