数据结构——单链表——2016_11_10
单链表源代码(C语言版)
只实现了插入和删除;
[code=C/C++] #include<stdio.h> #include<stdlib.h> //定义LNode结构体 typedef struct LNode{ int data; struct LNode * next; }LNode,*LinkList; //*LinkList 的用法:定义变量 LinkList L 等价于 struct LNode * L //初始化单链表 void InitLink(LinkList L){ L->next=NULL; } //插入数据 void InsertLink(LinkList L,int i,int e){ LinkList p,s; int j=0; p=L; while(p&&j<i-1){ p=p->next; j++; } if(!p||i<j+1) //此处的i<j+1原本为严蔚敏书上的j>i-1,这样写是为了更加符合逻辑思维。两个表达式是指一样。下处同理。 exit(0); s=malloc(sizeof(LNode)); s->next=p->next; p->next=s; s->data=e; } //删除数据 void DeleteLink(LinkList L,int i){ LinkList p,s; int j=0; p=L; while(p->next &&j<i-1){ p=p->next; j++; } if(!(p->next)||i<j+1) exit(0); s=p->next; p->next=s->next; free(s); } //打印单链表 void PrintLink(LinkList L){ LinkList p; p=L->next; while(p){ printf("%d ",p->data); p=p->next; } printf("\n"); } //主函数 int main(){ LNode M; int x,w,e,a; InitLink(&M); for(x=1;x<=12;x++){ InsertLink(&M,x,x); } PrintLink(&M); printf("十二个节点的单链表已经建立\n\n"); printf("@@@@@@@@@@@@请输入操作序号:@@@@@@@@@@@@@\n"); printf("1:插入 2:删除 3:退出\n"); scanf("%d",&w); while(w!=3){ switch(w){ case 1: printf("请输入要插入数据的位置和数值:"); scanf("%d%d",&a,&e); InsertLink(&M,a,e); PrintLink(&M); break; case 2: printf("请输入要删除数据的位置:"); scanf("%d",&a); DeleteLink(&M,a); PrintLink(&M); break; default : printf("操作有误,请重新输入:\n"); } printf("@@@@@@@@@@@@请输入操作序号:@@@@@@@@@@@@@\n"); printf("1:插入 2:删除 3:退出\n"); scanf("%d",&w); } exit(0); return 0; } [/code]运行程序截图:
有问题可联系:xhsgg12302@outlook.com
2016-11-10