永发信息网

2. 编写程序,创建成一个正序排列的单链线性表,可实现删除一个元素,保持链表的正序。

答案:1  悬赏:0  手机版
解决时间 2021-11-09 15:43
  • 提问者网友:伴风望海
  • 2021-11-08 21:03
2. 编写程序,创建成一个正序排列的单链线性表,可实现删除一个元素,保持链表的正序。
最佳答案
  • 五星知识达人网友:轮獄道
  • 2021-11-08 22:06
#include
#include 
#include 
#include 

typedef struct Node
{
int data;
struct Node *next;
}NODE,*PNODE;

PNODE Init();
void Show(PNODE);
PNODE Delete(PNODE);
PNODE Sort(PNODE);

PNODE Init()
{
PNODE head = NULL;
PNODE pTail = NULL;
int t=0;
for(int i=0; i<6; i++)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(!pNew)
exit(-1);
printf("[%d]",i+1);
scanf("%d",&pNew->data);
if(0==t)
{
head = (PNODE)malloc(sizeof(NODE));
if(!head)
exit(-1);
head = pNew;
pNew->next = NULL;
pTail = head;
t=1;
}
else
{
pTail->next = pNew;
pNew->next= NULL;
pTail = pNew;
}
}
return head;
}

void Show(PNODE head)
{
int i=1;
PNODE p =  head;
while(NULL!= p)
{

printf("[%d]:%d
",i,p->data);
p = p->next;
i++;
}
putchar(10);
return;
}

PNODE Delete(PNODE head)
{
int pos;
PNODE p = head;
PNODE p2 = head;
PNODE p1 = p;

printf("想删除的节点:");
scanf("%d",&pos);
pos-=1;
while(pos!=0)
{
p1 = p;
p = p->next;
pos--;
}
p1->next = p->next;
free(p);
p = NULL;

return p2;
}

PNODE Sort(PNODE head)
{
PNODE p1 = head;
PNODE p2 = NULL;
PNODE p3 = head;
int i,j,t;
int len = 0;
while(p1 != NULL)
{
p1 = p1->next;
len++;
}
p1 = p3;
p2 = p1->next;
for(i = 0; i < len-1; i++,p1 = p1->next)
{
for(j = i+1,p2 = p1->next; j < len; j++,p2 = p2->next)
{
if(p1->data > p2->data)
{
t = p1->data;
p1->data = p2->data;
p2->data = t;
}
}
}
return p3;
}

int main()
{
PNODE head = NULL;
head = Init();
printf("输入的数为:
");
Show(head);
printf("-------------------
");
printf("排序之后的数为:
");
head = Sort(head);
Show(head);
printf("删除之后的数为:
");
head = Delete(head);
Show(head);
printf("-------------------
");
system("pause");
return 0;
}上机测试:



【PS】这个是无头指针的做法!有些地方还能改进。不知道符不符合您的意思。如有问题,请追问!很高兴帮助您!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯