链表
结构体:
typedef struct LNode *List;
typedef struct LNode{
int Data;
List Next;
}LNode,*LinkList;
创建链表:
LinkList CreateLinkList_L(LinkList L,int n) {
int i;
LNode *p;
L = (LinkList )malloc(sizeof(struct LNode));
L->Next = NULL;
for(i=0;i<n;i++){
p = (LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->Data);
p->Next = L->Next;L->Next = p;
}
return L;
}
判长:
int lenght(LinkList L)
{
LNode *p = L;
int j = 0;
while(p){
p = p->Next;
j++ ;
}
return j;
}
查找:
LinkList FindKth(int k,LinkList L)
{
LNode *p = L;
int i =1;
while(p!=NULL&&i<k){
p = p->Next;
i++;
}
if(i==k) return p;
else return NULL;
}
插入:
LinkList Insert(int X,int i,LinkList L)
{
LNode *p,*s;
if(i==1){
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->Next = L->Next;
L->Next = s;
return s;
}
p = FindKth(i-1,L);
if( p==NULL){
printf("参数错");
return NULL;
}else{
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->Next = p->Next;
p->Next = s;
return L;
}
}
删除:
LinkList Delete(int i,LinkList L)
{
LNode *p,*s;
if( i==1 ){
s = L;
if( L!=NULL) L = L->Next;
else return NULL;
}
p = FindKth(i-1,L);
if(p==NULL){
printf("第%d个结点不存在",i-1);
return NULL;
}else if(p->Next == NULL){
printf("第%d个结点不存在",i);
return NULL;
}else {
s = p->Next;
p->Next = s->Next;
free(s);
return L;
}
}
完整代码:
#include<stdio.h>
# include <malloc.h>
typedef struct LNode *List;
typedef struct LNode{
int Data;
List Next;
}LNode,*LinkList;
LinkList CreateLinkList_L(LinkList L,int n) {
int i;
LNode *p;
L = (LinkList )malloc(sizeof(struct LNode));
L->Next = NULL;
for(i=0;i<n;i++){
p = (LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->Data);
p->Next = L->Next;L->Next = p;
}
return L;
}
//判长
int lenght(LinkList L)
{
LNode *p = L;
int j = 0;
while(p){
p = p->Next;
j++ ;
}
return j;
}
//查找(链表第k个位置)
LinkList FindKth(int k,LinkList L)
{
LNode *p = L;
int i =1;
while(p!=NULL&&i<k){
p = p->Next;
i++;
}
if(i==k) return p;
else return NULL;
}
//插入
LinkList Insert(int X,int i,LinkList L)
{
LNode *p,*s;
if(i==1){
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->Next = L->Next;
L->Next = s;
return s;
}
p = FindKth(i-1,L);
if( p==NULL){
printf("参数错");
return NULL;
}else{
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->Next = p->Next;
p->Next = s;
return L;
}
}
LinkList Delete(int i,LinkList L)
{
LNode *p,*s;
if( i==1 ){
s = L;
if( L!=NULL) L = L->Next;
else return NULL;
}
p = FindKth(i-1,L);
if(p==NULL){
printf("第%d个结点不存在",i-1);
return NULL;
}else if(p->Next == NULL){
printf("第%d个结点不存在",i);
return NULL;
}else {
s = p->Next;
p->Next = s->Next;
free(s);
return L;
}
}
int main(){
LinkList L,p;
int n;
scanf("%d",&n);
L = CreateLinkList_L(L,n);
p = L;
// while(p!=NULL){
// p=p->Next;
// printf("%d\n",p->Data);
//
// }
printf("%d",FindKth(2,L)->Data);
return 0;
}
刚考完研,学了408(数据结构、计算机组成原理、计算机网络、操作系统),想着把数据结构的代码重新敲一遍,加深印象。若有错误望大家能指正。