c语言实现的静态链表 哥们第一篇 请各位大牛多指教
来源:互联网 发布:淘宝客服兼职多少钱 编辑:程序博客网 时间:2024/04/18 13:15
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
#define MAXSIZE 100
typedef struct SNode
{
ElemType elem;
int iCur;
} *Link;
ElemType InitElem( )
{
int iNum = 0;
scanf( "%d", &iNum );
return iNum;
}
void ShowElem( ElemType elem )
{
printf( "%d\n", elem );
}
int ComPare( ElemType elem1, ElemType elem2 )
{
return elem1 - elem2;
}
bool InitStaticLink( Link &link )
{
link = (Link )malloc( MAXSIZE * sizeof( SNode ) );
for( int i = 0; i < MAXSIZE - 1; ++i )
{
link[i].iCur = i + 1;
}
link[ MAXSIZE - 1 ].iCur = 0;
return true;
}
int Malloc( Link link )
{
int i = link[0].iCur;
if( i != 0 )
{
link[0].iCur = link[i].iCur;
}
return i;
}
void Free( Link link, int iPos )
{
link[iPos].iCur = link[0].iCur;
link[0].iCur = iPos;
}
void Print( Link link, int iPos )
{
if( iPos == 0 )
{
printf("Link is empty!\n");
return;
}
while( 1 )
{
ShowElem( link[iPos].elem );
if( link[iPos].iCur == 0 )
{
break;
}
iPos = link[iPos].iCur;
}
}
//功能 (A-B)U(B-A)
int Merge(Link link)
{
int iSt = Malloc( link );
if( iSt == 0 )
{
printf("No space could be alloc!");
return -1;
}
int iFirNum = 0;
int iSecNum = 0;
printf( "Input first Num:\n");
scanf( "%d", &iFirNum );
printf( "Input second Num:\n");
scanf( " %d", &iSecNum );
printf(" Now Init first link!\n");
int iMove = iSt;
int iIndex = 0;
while( iIndex++ < iFirNum )
{
int iCur = Malloc( link );
ElemType elem = InitElem();
link[iCur].elem = elem;
link[iMove].iCur = iCur;
iMove = iCur;
}
link[iMove].iCur = 0;
printf( "Now Init second link!\n");
iIndex = 0;
while( iIndex++ < iSecNum )
{
ElemType elem = InitElem();
bool bFind = false;
int iPre = iSt;
int iPos = link[iSt].iCur;
while( 1 )
{
if( ComPare( link[iPos].elem, elem ) == 0 )
{
link[iPre].iCur = link[iPos].iCur;
Free( link, iPos );
bFind = true;
break;
}
if( link[iPos].iCur == 0 )
{
break;
}
iPre = iPos;
iPos = link[iPos].iCur;
}
if( !bFind )
{
int iAdd = Malloc( link );
if( iAdd == 0 )
{
printf("Link is full!");
return iSt;
}
link[iAdd].elem = elem;
link[iAdd].iCur = link[iPos].iCur;
link[iPos].iCur = iAdd;
}
}
return iSt;
}
void main()
{
Link link;
InitStaticLink( link );
int iSt = Merge( link );
if( iSt == -1 )
{
return;
}
printf( "Now print link!\n");
Print( link, link[iSt].iCur );
getchar();
int i;
scanf("%d", &i);
}
#include <stdlib.h>
#define ElemType int
#define MAXSIZE 100
typedef struct SNode
{
ElemType elem;
int iCur;
} *Link;
ElemType InitElem( )
{
int iNum = 0;
scanf( "%d", &iNum );
return iNum;
}
void ShowElem( ElemType elem )
{
printf( "%d\n", elem );
}
int ComPare( ElemType elem1, ElemType elem2 )
{
return elem1 - elem2;
}
bool InitStaticLink( Link &link )
{
link = (Link )malloc( MAXSIZE * sizeof( SNode ) );
for( int i = 0; i < MAXSIZE - 1; ++i )
{
link[i].iCur = i + 1;
}
link[ MAXSIZE - 1 ].iCur = 0;
return true;
}
int Malloc( Link link )
{
int i = link[0].iCur;
if( i != 0 )
{
link[0].iCur = link[i].iCur;
}
return i;
}
void Free( Link link, int iPos )
{
link[iPos].iCur = link[0].iCur;
link[0].iCur = iPos;
}
void Print( Link link, int iPos )
{
if( iPos == 0 )
{
printf("Link is empty!\n");
return;
}
while( 1 )
{
ShowElem( link[iPos].elem );
if( link[iPos].iCur == 0 )
{
break;
}
iPos = link[iPos].iCur;
}
}
//功能 (A-B)U(B-A)
int Merge(Link link)
{
int iSt = Malloc( link );
if( iSt == 0 )
{
printf("No space could be alloc!");
return -1;
}
int iFirNum = 0;
int iSecNum = 0;
printf( "Input first Num:\n");
scanf( "%d", &iFirNum );
printf( "Input second Num:\n");
scanf( " %d", &iSecNum );
printf(" Now Init first link!\n");
int iMove = iSt;
int iIndex = 0;
while( iIndex++ < iFirNum )
{
int iCur = Malloc( link );
ElemType elem = InitElem();
link[iCur].elem = elem;
link[iMove].iCur = iCur;
iMove = iCur;
}
link[iMove].iCur = 0;
printf( "Now Init second link!\n");
iIndex = 0;
while( iIndex++ < iSecNum )
{
ElemType elem = InitElem();
bool bFind = false;
int iPre = iSt;
int iPos = link[iSt].iCur;
while( 1 )
{
if( ComPare( link[iPos].elem, elem ) == 0 )
{
link[iPre].iCur = link[iPos].iCur;
Free( link, iPos );
bFind = true;
break;
}
if( link[iPos].iCur == 0 )
{
break;
}
iPre = iPos;
iPos = link[iPos].iCur;
}
if( !bFind )
{
int iAdd = Malloc( link );
if( iAdd == 0 )
{
printf("Link is full!");
return iSt;
}
link[iAdd].elem = elem;
link[iAdd].iCur = link[iPos].iCur;
link[iPos].iCur = iAdd;
}
}
return iSt;
}
void main()
{
Link link;
InitStaticLink( link );
int iSt = Merge( link );
if( iSt == -1 )
{
return;
}
printf( "Now print link!\n");
Print( link, link[iSt].iCur );
getchar();
int i;
scanf("%d", &i);
}
0 0
- c语言实现的静态链表 哥们第一篇 请各位大牛多指教
- c语言实现的静态链表 多指教
- 请各位高手指教!
- 请各位多多指教
- 自己实现的my_strtok函数,不妥的地方请各位多多指教
- Vc++如何实现按钮打开*bmp的文件,请各位大虾指教?
- 关于C语言方面的问题 请高手指教
- 请各位大虾多多指教!
- 请各位大虾多多指教
- 初来乍道,请各位多多指教!
- 初来乍到,请各位前辈指教
- window xp安装不了的问题,请各位大虾指教
- 一个搞不懂的C++程序,请各位指教
- 如何锻炼分析问题的方法?请各位大虾指教~~
- 这是我的第一篇博客,初来驾到请多多指教!
- C语言静态链表的实现
- CSDN的第一篇日志,自我感觉水得不行,还请各位见谅
- 请各位C语言高手帮帮忙!
- 计算从1到N中1的出现次数
- leetcode第一刷_Sort List
- FreeSwitch安装音乐文件遇到的问题
- 单向一对一主键关联实例
- C++中基本类型
- c语言实现的静态链表 哥们第一篇 请各位大牛多指教
- TestFlight——完美的iOS App测试方案
- PMP-产品范围与项目范围区别
- C#中子线程操作主线程中窗体上控件的方法
- 语录
- winform操作系统,登录后怎么关闭登录界面。
- 设计模式---装饰者模式(学习笔记)
- C/C++字符串查找函数
- win7下重装mysql