大神帮忙看下小弟我这个静态链表的程序应该咋改呀,弄了一下午了,还是有有关问题
大神帮忙看下我这个静态链表的程序应该咋改呀,弄了一下午了,还是有问题
我就是想创建一个静态链表,然后在里面插入一个数,最后打印出来,程序如下喽:
#include <stdio.h>
#include <iostream.h>
#define MAX_SIZE 20
typedef struct{
int data;
int cur;
}component,SLinklist[MAX_SIZE];
void init(SLinklist &space)
{
for(int i=0;i<MAX_SIZE-1;i++)
space[i].cur=i+1;
space[MAX_SIZE-1].cur=0;
}
int Malloc(SLinklist &space)
{
int i=space[0].cur;
if(space[0].cur)
space[0].cur=space[i].cur;
return i;
}
int Insert(SLinklist &space,int i ,int e)
{
int j=0;
while(j<i-1)
j=space[j].cur;
int m=Malloc(space);
space[m].data=e;
space[m].cur=space[j].cur;
space[j].cur=m;
return true;
}
void print( SLinklist &space)
{
int p = 1;
while ( p!=NULL )
{
printf( "%d ", space[p].data );
p = space[p].cur;
}
} //输出静态链表中的元素
void main()
{
SLinklist space;
int a=1;
int temp;
init(space);
for(int i=0;i<10;i++)
{
temp=Malloc(space);
space[temp].data=a;
a=a+2;
}
Insert(space,3,88);
print(space);
}
------解决方案--------------------
------解决方案--------------------
这个是我用vc++调试过的,刚发的那个代码有点问题,用这个
关键是如果一般性插入只需插入空间末尾即可,如果要排序就要复杂了,呵呵
我就是想创建一个静态链表,然后在里面插入一个数,最后打印出来,程序如下喽:
#include <stdio.h>
#include <iostream.h>
#define MAX_SIZE 20
typedef struct{
int data;
int cur;
}component,SLinklist[MAX_SIZE];
void init(SLinklist &space)
{
for(int i=0;i<MAX_SIZE-1;i++)
space[i].cur=i+1;
space[MAX_SIZE-1].cur=0;
}
int Malloc(SLinklist &space)
{
int i=space[0].cur;
if(space[0].cur)
space[0].cur=space[i].cur;
return i;
}
int Insert(SLinklist &space,int i ,int e)
{
int j=0;
while(j<i-1)
j=space[j].cur;
int m=Malloc(space);
space[m].data=e;
space[m].cur=space[j].cur;
space[j].cur=m;
return true;
}
void print( SLinklist &space)
{
int p = 1;
while ( p!=NULL )
{
printf( "%d ", space[p].data );
p = space[p].cur;
}
} //输出静态链表中的元素
void main()
{
SLinklist space;
int a=1;
int temp;
init(space);
for(int i=0;i<10;i++)
{
temp=Malloc(space);
space[temp].data=a;
a=a+2;
}
Insert(space,3,88);
print(space);
}
------解决方案--------------------
#define MAX_SIZE 20 //静态链表的最大空间
typedef struct Node
{
int data;
int cur;
}NODE, * PNODE;
int list_len ; //链表长度
NODE SLinkList[MAX_SIZE]; //静态链表
//功能: 建立头结点
//list::静态链表
void InitList(PNODE &list)
{
list_len = 0; //链表长度为0
list[0].cur = 0; //头结点不存储数据,只是把游标设为0即可,
}
void InsertNode(PNODE &list,int data)
{
int i = 0;
while(list[i].cur != 0) // 找到尾结点
{
i = list[i].cur;
}
//在空间末尾插入节点
list[i].cur = ++ list_len;
list[list_len].cur = 0; //尾结点指针为0
list[list_len].data = data;
}
void PrintList(PNODE &list)
{
int i = 1;
int p;
if( list[0].cur == 0 ) return ; //空链表则直接返回
while( list [i].cur != 0) //头结点不打印
{
printf(“%d”,list[i].data);
i = list[i].cur; //找到下一个节点
}
printf("%d",list[i].data)
}
void main()
{
InitList(SLinkList);
for(int i = 0; i< 5; i++)
{
InsertNode(SLinkList,i); //把0~5插入链表
}
PrintList(SLinkList)
}
------解决方案--------------------
这个是我用vc++调试过的,刚发的那个代码有点问题,用这个
关键是如果一般性插入只需插入空间末尾即可,如果要排序就要复杂了,呵呵
// SLinkList.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define MAX_SIZE 20 //静态链表的最大空间
typedef struct Node
{
int data;
int cur;
}NODE, * PNODE;
int list_len ; //链表长度
NODE SLinkList[MAX_SIZE]; //静态链表
//功能: 建立头结点
//list::静态链表
void InitList(PNODE list)
{
list_len = 0; //链表长度为0
list[0].cur = 0; //头结点不存储数据,只是把游标设为0即可,
}
void InsertNode(PNODE list,int data)
{
int i = 0;
while(list[i].cur != 0) // 找到尾结点
{
i = list[i].cur;
}