2-4 在排好序的数中插入一个数,用链表来实现
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *p,*head,*q,*t;
int i,n,a;
scanf("%d",&n);
head = NULL;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
//读入待插入的数
scanf("%d",&a);
t=head;
while(t!=NULL)
{
if(t->next==NULL || t->next->data > a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t->next;
t->next=p;
break;//插入完毕退出循环
}
t=t->next;
}
//输出链表中所有的数
t=head;
while(t!=NULL)
{
printf("%d ",t->data);
t=t->next;
}
return 0;
}
python 实现
#定义表的结点类
class LNode:
def __init__(self,data,pnext=None):
self.data=data
self.pnext=pnext
#定义单链表的类
class LList:
def __init__(self):
self.head = None
def initlist(self,data):
self.head = LNode(0) #头结点不存数据
p = self.head
for i in data[0:]:
node = LNode(i)
p.pnext = node
p = p.pnext
def insert(self, item):
p = LNode(0)
t=self.head
while t is not None:
if t.pnext is None or t.pnext.data > item:
p.data = item
p.pnext = t.pnext
t.pnext = p
break
t = t.pnext
def printall(self):
p=self.head.pnext
while p is not None:
print(p.data, end=' ')
p=p.pnext
if __name__=='__main__':
eles = input('intput elements:').strip().split()
datas = [int(ele) for ele in eles]
linklist = LList()
linklist.initlist(datas)
item = int(input("待插入的数据:"))
linklist.insert(item)
linklist.printall()