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

回顾数据结构(1):单链表

2016-11-04 19:07 375 查看
1.链表的结点由数据域和指针域构成:



//定义链表结构
typedef struct LNode{
ElemType data;
struct LNode *next;
}Node,*LinkList;


2.创建链表:

//创建链表
Status CreateLinkList(LinkList &L,int n){
LinkList p,head;
L = (LinkList)malloc(sizeof(Node));
if(!L) return ERROR;
L->next = NULL;
head = L;
printf("input data:\n");
for(int i = 0;i<n;i++){
p = (LinkList)malloc(sizeof(Node));
if(!p) return ERROR;
scanf("%d",&p->data);
p->next = NULL;
head->next = p;
head = p;
}
return OK;

}


3.获取链表中某一项

//获取元素
Status GetItem(LinkList L ,int i,ElemType &e){
LinkList head ;
head = L->next;
int j = 0;
while(head &&j<i-1){
head  = head ->next;
++j;
}
if(!head ||j>i-1){
return ERROR;
}
e = head->data;
return OK;
}


4.链表的遍历

//遍历链表
Status ReadLinkList(LinkList L){
printf("output data:\n");
LinkList p;
p = L->next;
if(!p) {
printf("error");
return ERROR;
}
while(p!= NULL){
printf("%d ",p->data);
p = p->next;
}
return OK;
}


5.链表的插入

Status InertItem(LinkList L,int i,ElemType e){
LinkList head,temp;
int j=0;
head = L;
while(head&&j<i-1){
head = head->next;
++j;
}
if(!head&&j>i-1) return ERROR;

temp = (LinkList)malloc(sizeof(Node));
if(!temp) return ERROR;
temp->data = e;
temp->next = head->next;
head->next = temp;
return OK;
}


6.链表的删除

Status deleteLinkList(LinkList L,int i){
LinkList head,temp;
head = L;
int j=0;

while(head->next&&j<i-1){
head = head->next;
++j;
}
if(!head->next||j>i-1) return ERROR;
temp = head->next;
head->next = temp->next;
printf("delete item is: %d",temp->data);
free(temp);
return OK;
}


全部代码:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define OK 1;
#define ERROR 0;
typedef int Status;
typedef int ElemType;

//定义链表结构 typedef struct LNode{ ElemType data; struct LNode *next; }Node,*LinkList;

//创建链表 Status CreateLinkList(LinkList &L,int n){ LinkList p,head; L = (LinkList)malloc(sizeof(Node)); if(!L) return ERROR; L->next = NULL; head = L; printf("input data:\n"); for(int i = 0;i<n;i++){ p = (LinkList)malloc(sizeof(Node)); if(!p) return ERROR; scanf("%d",&p->data); p->next = NULL; head->next = p; head = p; } return OK; }
//遍历链表 Status ReadLinkList(LinkList L){ printf("output data:\n"); LinkList p; p = L->next; if(!p) { printf("error"); return ERROR; } while(p!= NULL){ printf("%d ",p->data); p = p->next; } return OK; }
//获取元素 Status GetItem(LinkList L ,int i,ElemType &e){ LinkList head ; head = L->next; int j = 0; while(head &&j<i-1){ head = head ->next; ++j; } if(!head ||j>i-1){ return ERROR; } e = head->data; return OK; }
Status InertItem(LinkList L,int i,ElemType e){ LinkList head,temp; int j=0; head = L; while(head&&j<i-1){ head = head->next; ++j; } if(!head&&j>i-1) return ERROR; temp = (LinkList)malloc(sizeof(Node)); if(!temp) return ERROR; temp->data = e; temp->next = head->next; head->next = temp; return OK; }
Status deleteLinkList(LinkList L,int i){ LinkList head,temp; head = L; int j=0; while(head->next&&j<i-1){ head = head->next; ++j; } if(!head->next||j>i-1) return ERROR; temp = head->next; head->next = temp->next; printf("delete item is: %d",temp->data); free(temp); return OK; }
int main()
{
LinkList L;
L = NULL;
int num;
printf("input the length of LinkList:\n");
scanf("%d",&num);
CreateLinkList(L,num);
ReadLinkList(L);
ElemType e;
printf("\ninput the item index:\n");
scanf("%d",&num);
GetItem(L,num,e);
printf("%d",e);
printf("\ninput the insert item and it's index:\n");
int index;
scanf("%d",&e);
scanf("%d",&index);
InertItem(L,index,e);
printf("\nafter insert action linkList\n");
ReadLinkList(L);
printf("\nafter delete index \n");
scanf("%d",&index);
deleteLinkList(L,index);
printf("\nafter delete action linkList\n");
ReadLinkList(L);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息