單鏈表是不一樣於順序表的另外一種線性結構,每個結點包含了數據域和指針域,可經過每一結點的指針域直接訪問下一個結點,顧名思義,是一種鏈式結構。
本次實現的功能包括: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