单链表是不一样于顺序表的另外一种线性结构,每个结点包含了数据域和指针域,可经过每一结点的指针域直接访问下一个结点,顾名思义,是一种链式结构。
本次实现的功能包括:c++
#include<stdio.h> #include<stdlib.h> #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef struct LNode{ int data; struct LNode *next; }LNode,* Linklist; Status InitList(Linklist &L){ //构造空表 L = (Linklist)malloc(sizeof(LNode)); L->data = NULL; L->next = NULL; } Status ListInsert_L(Linklist &L,int i){ //在带头结点的单链线性表L中第i个位置插入键盘输入的数 int e,j = 0; scanf("%d",&e); Linklist p; p = L; while(p && j < i-1){p = p->next; ++j;} //找到链表中第i-1个元素 if(!p || j>i-1)return ERROR; Linklist s = (Linklist)malloc(sizeof(LNode)); s->data = e;s->next = p->next; p->next = s; return OK; } Status Elem_search(Linklist L){ //查找链表中指定元素 printf("您要查找哪一个位置的数\n"); int i,j = 0; Linklist p = L; scanf("%d",&i); while(p && j < i) {p = p->next;++j;} //找到链表中第i个元素 if(!p || j > i)return ERROR; printf("您查找的数是:%d\n",p->data); return OK; } Status List_print(Linklist L){ //打印链表 Linklist p; p = L; printf("现有的单链表为:\n"); p = p->next; while(p->next != NULL) {printf("%d ",p->data);p = p->next;} printf("%d ",p->data); printf("\n"); return OK; } Status ListDelete_L(Linklist &L){ //删除指定元素,并输出 printf("请输入要删除元素的位置:\n"); int i; scanf("%d",&i); Linklist p = L; int j = 0; while(p->next && j<i-1){p = p->next;++j;} //找到链表中第i-1个元素 if(!(p->next)||j>i-1)return ERROR; //保证链表有第i个元素 Linklist q = p->next; p->next = q->next; printf("%d被删除了\n",q->data); free(q); return OK; } Status List_exchange(Linklist &L){ //交换指定元素与他后面一个元素的值 printf("请输入要交换元素的位置:\n"); int a,b,j = 0; scanf("%d",&a); Linklist p = L; while(p && j<a){p = p->next;++j;} //找到链表第a个元素 if(!(p->next)||j>a)return ERROR; //保证链表有第a+1个元素 b = p->data;p->data = p->next->data;p->next->data = b; printf("位置%d和位置%d交换了\n",a,a+1); return OK; } int main(){ Linklist L; InitList(L); printf("请依次输入四个整数:\n"); for(int r=1;r <= 4;r++)ListInsert_L(L,r); List_print(L); printf("请输入插入的位置和数(用换行分开):\n"); int a; scanf("%d",&a); ListInsert_L(L,a); List_print(L); Elem_search(L); ListDelete_L(L); List_print(L); List_exchange(L); List_print(L); }
单链表的基本操做和顺序表无异,但须要注意:访问顺序表中某一个元素时可直接访问,访问单链表中的某一元素则须要从头结点依次访问。指针
所用的编译器是dev c++.code