标题:顺序表的链式存储的基本操作
只看楼主
浮烟醉
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-9-27
结帖率:50%
 问题点数:0 回复次数:2 
顺序表的链式存储的基本操作
程序代码:
#include<stdbool.h> 
#include<stdio.h>
#include<stdlib.h>
typedef int ElementType; 
typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
List MakeEmpty()
{
    
    List L;

 
    L = (List)malloc(sizeof(struct LNode));
    L->Next = NULL;

 
    return L;
}

 
int Length(List L)
{
    Position p;
    int cnt=0;
    p=L;
    while(p!=NULL)
    {
        p=p->Next;
        cnt++;
        
    }
    return cnt;
}
/* 带头结点的插入 */

bool Insert( List L, ElementType X, int i )
{ /* 这里默认L有头结点 */
    Position tmp, pre;
    int cnt=0;
    pre=L;
    while(pre && cnt<i-1)
    {
        pre=pre->Next;
        cnt++;
      }  
              
    if ( pre==NULL ||cnt!=i-1) { 
        
        return false;
    }
    else { 
        tmp = (Position)malloc(sizeof(struct LNode)); /* 申请、填装结点 */
        tmp->Data = X; 
        tmp->Next = pre->Next;
        pre->Next = tmp;
        return true;
    }
}

 
/* 带头结点的删除 */
bool Delete( List L, int i )
{ /* 这里默认L有头结点 */
    Position tmp, pre;
    int cnt=0;

 
    pre=L;
    while(pre && cnt<=i-1)
    {
        pre=pre->Next;
        cnt++;
        
      }  
    if ( pre==NULL || cnt!=i-1||pre->Next==NULL) { 
        
        return false;
    }
    else { 
        tmp=pre->Next;
        pre->Next = tmp->Next;
        free(tmp);
        return true;
    }
}
int main(int argc,char** argv){
    List L=MakeEmpty();
    int n,op;
    int i;
    ElementType x;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&op);
        switch(op)
        {
            case 1:scanf("%d %d",&x,&i);
            Insert(L,x,i);
            break;
            case 2:scanf("%d",&i);
            Delete(L,i);
            break;
        }    
    }
    while(L!=NULL){
        printf("%d ",L->Data);
        L=L->Next;
               
    }
    
    return 0;
}

然后遍历输出后删除操作未运行成功,且有一长串不知道什么的数字输出是为什么,哪里错了,可以讨论一下咩
搜索更多相关主题的帖子: List NULL Next int return 
2019-09-27 23:32
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
试着在Insert,Delete方法首部打印一下参数

剑栈风樯各苦辛,别时冰雪到时春
2019-09-28 20:51
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
bool Delete( List L, int i )
{ /* 这里默认L有头结点 */
    Position tmp, pre;
    int cnt=0;
    pre=L;
    while(pre && cnt<=i-1)
    {
        pre=pre->Next;
        cnt++;
    }
    printf("cnt=%d,pre=%d\n,i=%d",cnt,pre->Data, i);


。。。。


        头结点没有设置值,所以不用管直接从第二个结点开始打印
        L=L->Next;
        while(L!=NULL){
            printf("%d ",L->Data);      
            L=L->Next;
        }
        return 0;
    }

[此贴子已经被作者于2019-9-28 21:09编辑过]


剑栈风樯各苦辛,别时冰雪到时春
2019-09-28 21:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497056-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045742 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved