关于单链表的一些基本操作
#include <iostream> #include <cstdio> #include <malloc.h> using namespace std; /* 定义单链表数据 */ typedef char ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LinkList; /* 单链表的初始化 */ void InitList(LinkList *&L) { L = (LinkList *)malloc(sizeof(LinkList)); L->next=NULL; } /* 向单链表中插入数据元素 */ bool ListInsert(LinkList *&L,int x,char e) { int j = 0; LinkList *p = L, *s; while(p!=NULL && j<x-1) { p = p->next; j++; } if(p==NULL) { return false; } else { s = (LinkList *)malloc(sizeof(LinkList)); s->data = e; s->next = p->next; p->next = s; return true; } } /* 输出单链表 */ void DispList(LinkList *L) { LinkList *p = L->next; while(p!=NULL) { printf("%c",p->data); p = p->next; } printf("\n"); } /* 求单链表的长度 */ int ListLength(LinkList *L) { LinkList *p = L->next; int i = 0; while(p!=NULL) { i++; p = p->next; } return i; } /* 查看单链表是否为空 */ bool ListEmpty(LinkList *L) { return L->next==NULL; } /* 求单链表中某个数据元素值 */ bool GetElem(LinkList *L,int i, ElemType &e) { LinkList *p = L; int j = 0; while(p!=NULL && j < i) { p=p->next; j++; } if(p==NULL) { return false; } else { e = p->data; return true; } } /* 在单链表中查找元素 */ int LocateElem(LinkList *L,ElemType e) { LinkList *p = L; int i = 0; while(p!=NULL && p->data!=e) { p = p->next; i++; } if(p==NULL) { return 0; } else { return i; } } /* 删除单链表中第 i 个元素*/ bool ListDelete(LinkList *&L,int i,ElemType &e) { int j = 0; LinkList *p = L, *q; while(p!=NULL && j < i - 1) { p = p->next; j++; } if(p==NULL) return false; else { q = p->next; if(q==NULL) return false; e = q->data; p->next = q->next; free(q); return true; } } /* 删除单链表 */ void DestroyList(LinkList *&L) { LinkList *p = L; LinkList *q = p->next; while(q!=NULL) { free(p); p = q; q = p->next; } free(p); } int main( ) { LinkList *h; ElemType e; printf("单链表的基本运算如下:\n"); printf("(1)初始化单链表\n"); InitList(h); printf("(2)依次采用尾插法插入 a,b,c,d,e 元素\n"); ListInsert(h,1,'a'); ListInsert(h,2,'b'); ListInsert(h,3,'c'); ListInsert(h,4,'d'); ListInsert(h,5,'e'); printf("(3)输出单链表:"); DispList(h); printf("(4)单链表h的长度 = %d\n",ListLength(h)); printf("(5)单链表h为%s\n",(ListEmpty(h)?"空":"非空")); GetElem(h,3,e); printf("(6)单链表h的第3个元素 = %c\n",e); printf("(7)元素a的位置 = %d\n",LocateElem(h,'a')); printf("(8)在第4个元素位置上插入f元素\n"); ListInsert(h,4,'f'); printf("(9)输出单链表h:"); DispList(h); printf("(10)删除h的第3个元素\n"); ListDelete(h,3,e); printf("(11)输出单链表h:"); DispList(h); printf("(12)释放单链表h\n"); DestroyList(h); return 0; }