第一章 单链表--结构体指针
typedef struct Node { int elem; // 代表数据域 struct Node* next; // 代表指针域,指向直接后继元素 } Linklist; Linklist* initLink() { Linklist* head = (Linklist*)malloc(sizeof(Linklist)); head->next = NULL; return head; }
单链表的初始化:定义一个Linklist结构体,创建数据域和指针域。之后初始化头尾结点,将头节点的下一个赋成空。
以下为单链表中各种功能函数:
bool isEmpty(Linklist* head) { //判断链表是否为空 if (head->next == NULL) return true; else return false; }
int getLen(Linklist* head) { //用循环获取链表的长度 int count = 0; Linklist* temp = head; while (temp->next != NULL) { temp = temp->next; count++; } return count; }
void addNode(Linklist* head, int elem) { //在链表末尾添加结点,值为elem Linklist* p = (Linklist*)malloc(sizeof(Linklist)); //创建一个新指针p p->elem = elem; //p的值为elem p->next = NULL; Linklist* temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = p; //把p链入链表 } void insert(Linklist* head, int i , int elem) { //在链表中间位置i处添加结点,值为elem Linklist* p = (Linklist*)malloc(sizeof(Linklist)); p->elem = elem; int count = 0; Linklist* temp = head; while (temp->next!=NULL && count < i - 1) { temp = temp->next; count++; } p->next = temp->next; temp->next = p; }
void delNode(Linklist* head, int i) { //删除链表第i个结点 int count = 0; Linklist* temp = head; while (count < i-1) { temp = temp->next; count++; } temp->next = temp->next->next; }
void updateNode(Linklist* head, int i, int elem) { //修改链表第i个值为elem Linklist* p = (Linklist*)malloc(sizeof(Linklist)); p->elem = elem; int count = 0; Linklist* temp = head; while (count < i-1) { temp = temp->next; count++; } p->next = temp->next->next; //前后都要挂上p temp->next = p; }
int getElem(Linklist* head, int i) { //获取链表第i个结点的值 int count = 0; Linklist* temp = head; while (count < i-1) { temp = temp->next; count++; } return temp->next->elem; //取值表示:temp->elem }
int getIndex(Linklist* head, int elem) { //查找:若elem是第i个元素 则返回elem 否则返回0 int num = 0; Linklist* temp1 = head; while (temp1->next != NULL) { temp1 = temp1->next; num++; } Linklist* p = (Linklist*)malloc(sizeof(Linklist)); p->elem = elem; int count = 0; Linklist* temp = head; while (temp->next != NULL) { if (temp->elem != p->elem) { temp = temp->next; count++; } if (count < num) { if (temp->elem == p->elem) return count; } else return 0; } }
void printLinklist(Linklist* head) { //顺序打印链表每个元素的值 while (head->next != NULL) { cout << head->next->elem<<" "; head = head->next; } }
关于单链表相关知识:
• 线性表 • 由同类数据元素组成 • 由有限个数据元素组成 • 相邻元素之间存在着序偶关系 i , a i+1 > • 线性表是一种简单的数据结构:数据元素之间是由 一前驱一后继 的直观有序的关系确定。 • 线性表是一种最常见的数据结构:矩阵、数组、字符串、堆栈、队列等都符合线性条件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)