#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
int id;
struct node *next;
}NODE;
NODE* node_creat()
{
NODE *head;
NODE *p1,*p2,*p3,*p4;
int n,i,j,tem;
n = 0;
head = NULL;
p2 = p1 = (NODE*)malloc(sizeof(NODE));
printf("创建一个新节点:id = ");
scanf_s("%d",&p1->id);
if(p1->id != 0)
{
head = p1;
p2 = p1;
p1 = (NODE*)malloc(sizeof(NODE));
printf("创建一个新节点:id = ");
scanf_s("%d",&p1->id);
n++;
}
while(p1->id != 0)
{
n++;
p2->next = p1;
p2 = p1;
p1 = (NODE*)malloc(sizeof(NODE));
printf("创建一个新节点:id = ");
scanf_s("%d",&p1->id);
}
p2->next = NULL;
p3 = head;
for(i=0; i<n; i++)
{
p4 = p3;
for(j=i; j<n-1; j++)
{
p4 = p4->next;
if (p3->id > p4->id)
{
tem = p3->id;
p3->id = p4->id;
p4->id = tem;
}
}
p3 = p3->next;
}
return (head);
}
NODE* node_insert(NODE* head, char mode)
{
NODE* p,*p_tmp,*p_pre;
if(mode == 'y' || mode == 'Y')
{
p = (NODE*)malloc(sizeof(NODE));
printf("\r\n请输入要添加的新节点id:");
scanf_s("%d",&p->id);
if(p->id == 0)
{
return (head);
}
p_pre = p_tmp = head;
if(head->id > p->id)
{
p->next = head;
head = p;
return (head);
}
while(p_tmp != NULL && p_tmp->id != 0)
{
if (p->id < p_tmp->id)
{
p_pre->next = p;
p->next = p_tmp;
break;
}
p_pre = p_tmp;
p_tmp = p_tmp->next;
if(p_tmp == NULL)
{
p_pre->next = p;
p->next = p_tmp;
break;
}
}
}
return (head);
}
NODE* node_delete(NODE* head)
{
NODE* p,*p_pre,*p_del;
p_del = (NODE*)malloc(sizeof(NODE));
printf("\r\n请输入要删除的节点:id = ");
scanf_s("%d",&p_del->id);
p_pre = p = head;
if(head->id == p_del->id)
{
head = p->next;
free(p);
return(head);
}
while(p->id != 0)
{
if(p->id == p_del->id)
{
p_pre->next = p->next;
free(p);
break;
}
p_pre = p;
p = p->next;
}
return(head);
}
void node_print(NODE* head)
{
NODE* p;
p = head;
if(head == NULL)
{
printf("空链表.\r\n");
}
else
{
printf("The List: ");
while(p!= NULL && p->id != 0)
{
printf("%d ",p->id);
p = p->next;
}
}
}
void delay(int ms)
{
int i = 0;
while(ms--)
{
i++;
}
}
void main()
{
NODE* head;
char mode = 'y';
head = node_creat();
node_print(head);
while(1)
{
printf("\r\n是否要插入新的节点? y/n ");
scanf_s("%c",&mode);
scanf_s("%c",&mode);
if(mode == 'y' || mode == 'Y')
{
//printf("$$$$");
head = node_insert(head,mode);
node_print(head);
}
printf("\r\n是否要删除节点? y/n ?");
scanf_s("%c",&mode);
scanf_s("%c",&mode);
if(mode == 'y' || mode == 'Y')
{
head = node_delete(head);
node_print(head);
}
}
}
结果显示示例: