#include<stdio.h>
#define MaxSize 10//定义链表的最大长度
#include<stdlib.h>
//链表的插入操作
void insertElem(int *sqlist,int*len,int index,int elem){
       if(index>(*len)||index<0){
       	printf("Error!");
		exit(1);
	   }else {
	   	 for(int i=*len;i>=index;i--)
	   	    sqlist[i+1]=sqlist[i];
	   	    sqlist[index]=elem;
	   	    *len=*len+1;
	   }
       
}
//链表的删除操作
void deleteElem(int *sqlist,int*len,int index){
	 if(index>(*len)||index<0){
       	printf("Error!");
		exit(1);
	   }else {
	   	 for(int i=index;i<*len;i++)
	   	     sqlist[i]=sqlist[i+1];
	   	    *len=*len-1;
	   }
}
//这里是程序入口(主函数)
int main(){
	int flag=0;
    int 	sqlist[MaxSize];
	int len;
	printf("请输入链表的长度"); 
	scanf("%d",&len);
	if(len>MaxSize){
		printf("Error!");
		exit(1);
	}
	printf("请输入链表内容:\n");
	for(int i=0;i<len;i++)
	  scanf("%d",&sqlist[i]);
Go:
	printf("请选择你的操作:输入1表示插入操作,输入2表示删除操作:\n");
	scanf("%d",&flag);
	if(flag==1){
		int index=0;
		int elem=0;
		printf("请输入你要插入的位置index和元素值Elem\n");
		scanf("%d%d",&index,&elem);
		insertElem(sqlist,&len,index, elem);
	}
	else if(flag==2){
		int index1=0;
		printf("请输入你要删除元素的位置index\n");
		scanf("%d",&index1);
		deleteElem(sqlist,&len,index1);
	}else{
		exit(0);
	}
	printf("输出链表的内容如下:\n");
	for(int j=0;j<len;j++)
	printf("%d\n",sqlist[j]);
	printf("是否结束操作 Y/N \n");
	char flag2=‘a‘;
//为什么这里要使用while循环原因是在使用scanf时获得字符或者输入时,输入的缓冲区中还有很多未读取的输入所以无法正确获得scanf操作
	while(flag2!=‘Y‘){
		 scanf("%c",&flag2);
		 if(flag2==‘N‘){
		 	break ;
		 }
	}
	if(flag2==‘Y‘){
		return 0;
	}else{
		goto Go;//跳回到开始,重新开始对数据进行操作
	}
	return 0;
}
<p>
<p>
//运行结果如图:

<p>
代码或许还是不完美,可能也有bug。希望大家多多指教指教!!!!
原文:http://www.cnblogs.com/wangshuile/p/5568365.html