本文共 3259 字,大约阅读时间需要 10 分钟。
/*单链表的建立*/#include#include /****提供malloc、realloc、free、exit原型****/typedef struct LNode{ int number; /*数据域*/ struct LNode *next;c /*指针域*/}LNode;typedef LNode*LinkList /*指向单链表结点的指针*//************显示函数***************/void ShowAll(LinkList &L){ LinkList p; p = L->next; printf("链表显示如下:\n"); while(p){ //遍历表并显示每个结点 printf("%2d",p->number); p = p->next; } printf("\n"); printf("元素总数为:%d\n",L->number);}/***********初始化***********/void InitList(LinkList &L){ L = new LNode; L->next = NULL; L->number = 0; printf("单链表已经初始化!\n");}/************创建单链表***************/void CreatList(LinkList &L){ LinkList r,p; int choice; int n=0; char i; printf("请输入数据:\n"); r = L; do { p = new LNode; scanf("%d",&p->number); p->next = NULL; r->next = p; r = p; n++; } while((i=getchar())!='\n'); L->number += n; printf("请问是否显示所有结点?1/是,2/否\n"); scanf("%d",&choice); if(choice == 1){ ShowAll(L); return; }else return;}/************根据位置查找**********/void GetElem(LinkList &L){ LinkList p; int i,j; p = L->next; j = 1; printf("请输入查找的位置->\n"); scanf("%d",&i); if(!p && j>i){ printf("输入错误,请重新输入\n"); GetElem(L); return; } while(p && j next; j++; } printf("查找的元素为:%d\n",p->number); printf("是否继续?1/是 2/否\n"); scanf("%d",&i); if(i == 1){ GetElem(L); return; } else return;}/************根据结点信息查找*************/void Search(LinkList &L){ LinkList p; int i,e,j; p = L->next; j = 1; printf("请输入查找的信息->\n"); scanf("%d",&e); while(p && p->number != e){ p = p->next; j++; } if(!p) printf("没有你要查找的信息\n"); else { printf("您要查找的元素为:%d\n",p->number); printf("第一次出现的位置在第%d个\n",j); } printf("是否继续?1/是 2/否\n"); scanf("%d",&i); if(i == 1) { Search(L); return; } else return;}/***********插入函数*************/void ListInsert(LinkList &L){ LinkList s,e,p; int i,j; e = new LNode; p = L; j = 0; printf("请输入你要插入的位置->\n"); scanf("%d",&i); if(!p && j>i-1){ printf("输入错误,请重新输入:\n"); ListInsert(L); return; } printf("请输入要插入的信息->"); scanf("%d",&e->number); while(p && j next; j++; } s = new LNode; s->number = e->number; s->next = p->next; p->next = s; L->number++; printf("请问是否显示所有结点?1/是,2/否\n"); scanf("%d",&i); if(i == 1){ ShowAll(L); return; }else return;}/*************删除指定位置的结点**************/void ListDelete(LinkList &L){ LinkList p,q; int i,j; printf("请输入要删除的位置->\n"); scanf("%d",&i); j = 1; p = L->next; if( !(p->next) || ( j>i-1)){ printf("输入错误,请重新输入:\n"); ListDelete(L); return ; } while((p->next) && (j next; ++j; } q = p->next; p->next = q->next; free(q); L->number--; printf("请问是否显示所有结点?1/是,2/否\n"); scanf("%d",&i); if(i == 1){ ShowAll(L); return; }else return;}/*************清空单链表**************/void ClearList(LinkList &L){ LinkList q, p; p = L->next; while (p) { q = p->next; free(p); p = q; } L->next = NULL; printf("整表已删除!!!\n"); return ;}
#include"SinglyLinkedList.h"void main(){ LinkList L; InitList(L); CreatList(L); GetElem(L); Search(L); ListInsert(L); ListDelete(L); ClearList(L); printf("Test Closure!!!\n");}
转载地址:http://awywi.baihongyu.com/