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.pnextif __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()