#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct St
{
int data;
St* pNext;
}NODE,*PNODE;
PNODE creat_List(PNODE pHead)
{
int len = 0;
int val = 0;
int i ;
pHead = (PNODE)malloc(sizeof(NODE));
if(pHead == NULL)
{
printf("内存分配失败\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
printf("请输入创造的节点数\n");
scanf("%d",&len);
for(i = 0; i < len;i++)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew)
{
printf("节点分配失败\n");
exit(-1);
}
printf("请输入节点的值(一个一个来)\n");
scanf("%d",&val);
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
void travse_List(PNODE pHead )
{
PNODE p = pHead->pNext;
int val;
while(p != NULL)
{
val = p->data;
printf("%d ",val);
p = p->pNext;
}
printf("\n");
}
void travse_List_sort(PNODE pHead )
{
PNODE p = pHead;
int val;
while(p != NULL)
{
val = p->data;
p = p->pNext;
if(p!=NULL)
printf("%d ",val);
}
printf("\n");
}
void insert_List(PNODE pHead,int n)
{
PNODE p = pHead;
int val;
int j = 1;
while(j < n )
{
j++;
p = p->pNext;
}
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew)
{
printf("内存分配失败\n");
exit(-1);
}
printf("请输入插入节点的值\n");
scanf("%d",&val);
pNew->data = val;
pNew->pNext = p->pNext;
p->pNext = pNew;
}
void delete_List(PNODE pHead,int m)
{
PNODE p = pHead;
int j = 1;
while(j < m )
{
j++;
p = p->pNext;
}
PNODE q = p->pNext;
p->pNext = q->pNext;
free(q);
}
PNODE sort_list(PNODE pHead)
{
PNODE s=NULL;
PNODE r=pHead;
while(r!=NULL)
{
PNODE t=r->pNext;
PNODE cp=s;
PNODE ap=NULL;
while(cp!=NULL)
{
if(r->data < cp->data)
break;
else
{
ap=cp;
cp=cp->pNext;
}
}
if(ap==NULL)
{
r->pNext=s;
s=r;
}
else
{
r->pNext=cp;
ap->pNext=r;
}
r=t;
}
return s;
}
int main()
{
PNODE pHead = NULL;
int n = 0;
int m = 0;
pHead = creat_List( pHead);//创造节点
travse_List(pHead );//遍历输出
int t;
printf("1.插入值请按1\n2.删除值请按2\n3.排序请按3\n4.退出请按任意键\n");
while(1)
{
scanf("%d",&t);
if(t==1)
{
printf("输入在第几个节点前插入");
scanf("%d",&n);
insert_List( pHead,n);//插入节点
travse_List(pHead );
}
else if(t==2)
{
printf("输入第几个节点删除");
scanf("%d",&m);
delete_List( pHead, m);//删除节点
travse_List(pHead );
}
else if(t==3)
{
pHead=sort_list(pHead);
travse_List_sort(pHead );
printf("游戏到此结束,想玩再开一把呗…………\n");
break;
}
else
break;
}
return 0;
}
链表的操作(未解决,排序后无法正确进行插入和删除)
最新推荐文章于 2021-07-25 10:29:03 发布