数据结构——单链表——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

posted @ 2016-11-10 08:49  Obelia  阅读(187)  评论(0编辑  收藏  举报