刚学数据结构出现的问题!
要求一道上机实验题题,输入一组整数,存放到单链表中,并进行排序,插入,显示。我把要用的函数写出来了,就是不知道怎样进行连接呢?困惑中……求高手指点,最好带个简单的例子说明下。
我编了一个简单的:其中包括,插入,遍历,删除,查找。希望对你有帮助
// efgghh.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include"stdlib.h"
struct Sqlist{
int *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
};
//构造一个空的线性链表
void Sq(Sqlist &lm){
lm.elem=(int *)malloc(10*sizeof(int));
if(!lm.elem)
return ;
lm.length=0; //空间长度为0
lm.listsize=10; //初始存储容量
return ;
};
//创建链表
void CreatSqlist(Sqlist &lm){
int number;
scanf("%d",&number);
do{
lm.elem[lm.length]=number;
lm.length++;
scanf("%d",&number);
}while(number!=-1);
}
//遍历顺序表
void searchSqlist(Sqlist &lm)
{
int i;
for(i=0;i<lm.length;i++)
printf("第%d个元素是:%d\n",i+1,lm.elem[i]);
}
//处理顺序表 (基数全部位于偶数前)
void SWapSqlist(Sqlist &lm)
{
int a[100];
for(int i=0,j=0;i<lm.length;i++){
if(lm.elem[i]%2==1){
a[j] =lm.elem[i];
j++;
}
}
for(i=0;i<lm.length;i++){
if(lm.elem[i]%2==0){
a[j]=lm.elem[i];
j++;
}
}
for(i=0;i<lm.length;i++)
printf("%d ",a[i]);
}
//在顺序表中插入元素
void InsertSqlist(Sqlist &lm,int number ,int i)
{
int *q,*p;
if(i<1||i>lm.listsize){ //i值不合法
printf("插入位置不合法!");
return ;
}
//存储空间已满,增加分配
if(lm.length>lm.listsize){
lm.elem=(int *)realloc(lm.elem, (lm.listsize+10)*sizeof(int));
if(!lm.elem) //存储分配失败
return ;
lm.listsize =lm.listsize+10; //增加存储容量
lm.elem[i] = number;
}
//表不满,直接插入
q=&(lm.elem[i-1]); //q为插入的位置
for(p=&(lm.elem[lm.length-1]);p>=q;--p)
*(p+1)=*p; //插入位置及以后的元素全部右移
*q=number;
++lm.length; //表长加1
for(i=0;i<lm.length;i++)
printf("%d ",lm.elem[i]);
}
//在顺序表中删除元素
void DeleteSqlist(Sqlist &lm,int number)
{
int i,k;
for(i=0;i<=lm.length;i++){
if(number==lm.elem[i]){
for(k=i;k<=lm.length;k++)
lm.elem[k]=lm.elem[k+1]; //删除位置及其以后的元素全部左移
break;
}
}
lm.length--; //表长减1
if(i==lm.length)
printf("没有该数!");
for(i=0;i<lm.length;i++)
printf("%d ",lm.elem[i]);
}
//在顺序表中查找
int SearchSqlist(Sqlist &lm,int number)
{
int i;
for(i=0;i<lm.length;i++){
if(number==lm.elem[i])
return i+1;
}
if(i==lm.length)
return 0;
}
int main(int argc, char* argv[])
{
int i,number,lb,lc,e;
Sqlist lm;
Sqlist elem[100];
Sq(lm);
printf("elem的地址为:%d\n",lm.elem);
printf("length=%d\n",lm.length);
printf("listsize=%d\n",lm.listsize);
printf("输入一串数字(以-1结束):");
CreatSqlist(lm); //调用创建函数
searchSqlist(lm); //调用遍历函数
//对顺序表处理
printf("对该表进行处理(基数全部位于偶数前)后:");
SWapSqlist(lm); //调用处理函数
printf("\n");
//在顺序表中插入数字
printf("请输入你要插入的数:");
scanf("%d",&number);
printf("请输入你要插入的位置:");
scanf("%d",&i);
InsertSqlist(lm,number,i); //调用插入函数
printf("\n");
//在顺序表中删除元素
printf("请输入你要删除的元素:");
scanf("%d",&lb);
DeleteSqlist(lm,lb); //调用删除函数
printf("\n");
//在顺序表中查找元素
printf("请输入你要查找的数字:");
scanf("%d",&lc);
e=SearchSqlist(lm,lc); //e接受返回值
if(e==0)
printf("没有该数!");
else
printf("%d在顺序表中的位置是:第%d个",lc,e);
printf("\n");
//printf("Hello World!\n");
return 0;
}