您的位置:首页 > 理论基础 > 数据结构算法

C语言基础——数据结构

2018-02-02 19:54 351 查看

线性表

线性表的定义   定义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
删除节点:
q = p->link;
p->link = q->link;
free q;
链表逆序(重要)(笔试考):
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节点到pp -> next = q -> next; // 删除qfree(q);

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: