#include <stdio.h>
#include <stdlib.h>
typedef struct lint
{
int data;
struct lint *next;
} lint, *plist;
void stamp(plist head);
//头结点初始化
plist Lock(void)
{
plist head = malloc(sizeof(lint));
if (head == NULL)
{
printf("heda error\n");
return NULL;
}
head->next = NULL;
return head;
}
// 新节点初始化
plist Her_a(int data)
{
plist newnode = malloc(sizeof(lint));
if (newnode == NULL)
{
printf("newnodo erreo\n");
return 0;
}
newnode->data = data;
newnode->next = NULL;
return newnode;
}
//尾部插入
int Mak_a(plist head, int data)
{
plist newnode = Her_a(data);
plist p = head;
// 遍历到尾部
while (p->next != NULL)
{
p = p->next;
}
p->next = newnode;
newnode->next = NULL;
return 0;
}
//循环插入
void xun(plist head)
{
int a;
for (int i = 0; i < 7; i++)
{
printf("请输入第%d个数\n", i + 1);
scanf("%d", &a);
Mak_a(head, a);
}
}
//打印
void stamp(plist head)
{
printf("-head");
for (plist p = head; p->next != NULL; p = p->next)
{
printf("-%d", p->next->data);
}
printf("\n");
}
// 中间插入
int Her_b(plist head, int sum, int data)
{
plist newnode = Her_a(data);
plist p = head;
while (p->next != NULL)
{
if (p->data == sum)
{
printf("data === %d\n", p->data); break;
}
p = p->next;
}
if (p->next == NULL && p->data != sum)
{
printf("您的值没有找到\n");
return -1;
}
newnode->next = p->next;
p->next = newnode;
stamp(head);
return 0;
}
// 排序
void Her_n(plist head)
{
plist p = head;
plist q = p->next;
int i = 0;
while (1)
{
p = head;
q = p->next;
for (; q->next != NULL; p = p->next, q = q->next)
{
if(p->data > q->data)
{
i++;
break;
}
}
// 删除
p->next = q->next;
q->next = NULL;
p = head;
//比较
while (p->next != NULL)
{
if (p->next->data > q->data)
{
q->next = p->next;
p->next = q;
break;
}
p = p->next;
}
if(i == 0)
{
break;
}
i = 0;
}
stamp(head);
}
int main(int argc, char const *argv[])
{
plist myhead = Lock();
xun(myhead);
stamp(myhead);
// Her_b(myhead, 121, 100);
Her_n(myhead);
return 0;
}
单项链表排序
最新推荐文章于 2024-07-24 12:42:40 发布