C语言基础——数据结构

线性表

线性表的定义

   定义n个数据元素的有限序列,记作(a1, a2, …, an)ai 是表中数据元素,n 是表长度

线性表的特点

    除第一个元素外,其他每一个元素有一个且仅有一个直接前驱。

    除最后一个元素外其他每一个元素有一个且仅有一个直接后继。

顺序表的定义和特点

定义  将线性表中的元素相继存放在一个连续的存储空间中。          
可利用一维数组描述存储结构
特点   线性表的顺序存储方式
遍历   顺序访问, 可以随机存取     

内存存储方式:小端:低位存低地址 大端:高位存低地址


链表:
特点:1.每个元素(表项)由结点(Node)构成
  2.线性结构
  3. 结点可以连续,可以不连续存储

  4. 结点的逻辑顺序与物理顺序可以不一致

  5. 表可扩充

单链表:
typedef char ListData;

typedef struct node         //链表结点
{                               
    ListData     data;	    //结点数据域
    struct node   * link;   //结点链域
} ListNode;

typedef ListNode * LinkList;   

LinkList first;                           //链表头指针
插入第一个:
newnode->next = first
    first = newnode
插入链表中间:
newnode->next = p->next
p->next = newnode
C语言基础——数据结构_第1张图片


 
   
删除节点:
q = p->link;
 p->link = q->link;
 free q; 
C语言基础——数据结构_第2张图片 C语言基础——数据结构_第3张图片

 
   

链表逆序(重要)(笔试考):
int ReverseLinkList( LinkList A )
{
    if (A==NULL) return 0;
    ListNode *p = A->next;
    A->next = NULL;
    while (p!=NULL)
    {
        ListNode *q = p;
        p = p->next;
        q->next = A->next;
        A->next = q;
    }
    return 1;
}


 
   
循环链表:

循环链表是单链表的变形。 循环链表最后一个结点的 link指针不 为NULL,而是指向了表的前端。 为简化操作,在循环链表中往往加入表头结点。 循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。

一个链表不知道头结点,有一个指针指向其中一个结点,请问如何删除这个指针指向的结点。

node *p; // 当前节点
node *q;
q = p -> next;
p.data = q.data; // 复制q节点到p
p -> next = q -> next; // 删除q
free(q);



 
   
 
   
 
   
 
  

你可能感兴趣的:(C语言基础——数据结构)