线性表

Posted 每天学习一点点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表相关的知识,希望对你有一定的参考价值。

一、线性表

  线性表的定义:

    线性表是具有相同数据类型的有限数据的序列。

  线性表的特点:

    出了第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外有且只有一个后继。

    线性表是一种逻辑结构,表示元素之间的一一的相邻关系,顺序表和链表是指存储结构,两者属于不同的概念。

  线性表的顺序表示:

    线性表的顺序存储即数组的动态、静态分配,特点是可以随机访问。

  线性表的链式表示:

    线性表的链式存储即单链表、双连表、循环单链表以及循环双连表,特点是随机插入,不可随机访问。

    单链表的实现(python):

技术分享图片
  1 #-*- coding:utf-8 -*-
  2 class Node:
  3     def __init__(self,values,next=None):
  4         self.values=values
  5         self.next=None
  6 
  7 class linklist():
  8     def __init__(self):
  9         self.head=None
 10 
 11     #创建链表
 12     def listcreate(self,n):
 13         if n==0:
 14             return False
 15         elif n==1:
 16             print 请输入头结点:
 17             num=raw_input()
 18             return Node(num)
 19         else:
 20             print 请输入头结点:
 21             num = raw_input()
 22             root=Node(num)
 23             temp=root
 24             for i in range(2,n+1):
 25                 print 请输入第+str(i)+个结点:
 26                 num = raw_input()
 27                 temp.next=Node(num)
 28                 temp=temp.next
 29             return root
 30 
 31     #链表长度
 32     def listlen(self,head):
 33         n=0
 34         if head==None:
 35             return n
 36         while True:
 37             n+=1
 38             if head.next==None:
 39                 break
 40             head=head.next
 41         return n
 42 
 43     #读取链表所有数据
 44     def listread(self,head):
 45         if self.is_empty(head):
 46             return 链表为空!!!
 47         while True:
 48             if head.next==None:
 49                 print head.values
 50                 break
 51             print head.values
 52             head=head.next
 53 
 54     #链表是否为空
 55     def is_empty(self,head):
 56         if self.listlen(head)==0:
 57             return True
 58         else:
 59             return False
 60 
 61     #链表数据插入
 62     def listinsert(self,head,n,num):
 63         Head=head
 64         if self.listlen(head)<n-1 or self.is_empty(head):
 65             print 链表为空或者插入地点超过链表长度!
 66         elif n==1:
 67             node=Node(num)
 68             node.next=head
 69             Head=node
 70         else:
 71             c=1
 72             while True:
 73                 if c==n-1:
 74                     node=Node(num)
 75                     temp=head.next
 76                     head.next=node
 77                     node.next=temp
 78                     break
 79                 else:
 80                     c+=1
 81                     head=head.next
 82         return Head
 83 
 84     #链表中以数据进行删除
 85     def listdelete_data(self,head,data):
 86         Head=head
 87         if head.values==str(data):
 88             Head=head.next
 89             return Head
 90         while True:
 91             temp=head.next
 92             if temp.values==data:
 93                 head.next=head.next.next
 94                 break
 95             elif temp.next==None:
 96                 print str(data)+不存在链表中!!!
 97                 break
 98             else:
 99                 head=head.next
100         return Head
101 
102     #链表中以下标进行删除
103     def listdelete_index(self,head,index):
104         if index<0 or index>self.listlen(head)+1:
105             print 下标不规范,请重新输入!!
106         Head = head
107         c=1
108         if index == c:
109             Head = head.next
110             return Head
111         while True:
112             c+=1
113             if index==c:
114                 head.next = head.next.next
115                 break
116             head=head.next
117         return Head
118 
119     # 反转链表
120     def listreverse(self,head):
121         n=self.listlen(head)
122         c=1
123         while True:
124             temp=head
125             while True:
126                 if temp.next==None:
127                     break
128                 temp=temp.next
129             head = self.listdelete_index(head, n)
130             head=self.listinsert(head,c,temp.values)
131             c+=1
132             if c==n+1:
133                 break
134         return head
View Code

 



以上是关于线性表的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中的地图片段内中心线性布局?

垂直线性布局中的多个片段

线性表的插入和删除操作代码(C语言)

在android中的类内的对话框片段的线性布局中添加textview

数据结构学习笔记二线性表---顺序表篇(画图详解+代码实现)

数据结构学习笔记二线性表---顺序表篇(画图详解+代码实现)