您的位置:首页 > 理论基础 > 数据结构算法

数据结构 链表的实现(C语言)

2016-09-29 17:08 603 查看
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/*
单链表
*/
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct LNode{
int data;            //数据域
struct LNode * next;    //指针域

}LNode,*LinkList;

//创建(后插法)
LinkList create(){
int i;
int len;
int val;

LinkList list = (LinkList)malloc(sizeof(LNode));
if(list==NULL){
printf("内存分配失败\n");
exit(-1);
}
list->next = NULL;
printf("长度为:");
scanf("%d",&len);
printf("\n");
LinkList r = list;
for(i=0;i<len;i++){
LinkList p = (LinkList)malloc(sizeof(LNode));
printf("数据为:");
scanf("%d",&val);
p->data = val;
p->next = NULL;
r->next = p;
r = p;
}
return list;
}
//遍历
void traverse(LinkList list){
while(list->next!=NULL){
printf("%d ",list->next->data);
list = list->next;
}
}
//取值
int getEle(LinkList list,int i ){
LinkList p = list;    //p指向头结点
int j = 0;
if(i<0||p->next == NULL){
printf("i不合法或链表为空");
exit(-1);
}
while(p->next&&j<i){
p = p->next;
++j;
}
int e = p->data;
return e;

}
//插入
void insert(LinkList list,int i,int val){
LinkList p = list;
int j = 0;
while(p->next&&j<i-1){
p = p->next;
++j;
}
if(!p->next||j>i-1){
printf("i不合法\n");
}
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = val;
s->next = p->next;
p->next = s;
}
//删除
void deleteEle(LinkList list,int i){
LinkList p = list;
int j =0;
while(p->next&&j<i-1){
p = p->next;
++j;
}
if(!p->next||j>i-1){
printf("i不合法");
}
LinkList s = p->next;
p->next = s->next;
free(s);
}
//按值查找序号(地址)
void LocateElem(LinkList list,int ele){
LinkList p = list;
while(p->next!=NULL){
p = p->next;
if(ele == p->data){
printf("%p",p);
}
}
}
//计算长度
int getLength(LinkList list){
LinkList p = list->next;
int j = 0;
while(p!=NULL){
++j;
p = p->next;
}
return j;
}
int main(int argc, char *argv[]) {
LinkList list = NULL;
list = create(list);
//insert(list,1,222);
//deleteEle(list,2);
traverse(list);
//int e = getEle(list,3);
//LocateElem(list,3);
//int len = getLength(list);
//printf("length = %d",len);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: