数据结构上机题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#include
#define null 0
#define M 100
//typedef int Elemtype;这里定义了却没用,可见思维不连惯struct Lnode
{
// int num;
char data;
struct Lnode *next;
};
int lenth(struct Lnode **L)
{
int n=0;
struct Lnode *t;
t=*L;
while(t!=null)
{
n++;
t=t-> next;
}
return n;
}
/*
int lenth1(char r[])
{
int n=0;
n=sizeof(r);
return n-1;
}*/
void creat(struct Lnode**L)
{
*L=null;
}
//void insert(struct Lnode**L,int n, char d)
//从功能化分上,这个函数不需要知道现在插入第几个字符//困为你init函数中是先对一个串的字符进行了排序,所以//这里直接插入链表的尾部就行了
void insert(struct Lnode**L, char d)
{
struct Lnode *t1,*t2;
int j=1;
t1=(struct Lnode*)malloc(sizeof(struct Lnode));
t1-> data=d;
t1-> next=NULL;
if(*L==NULL)
{
*L=t1;
return;
}
t2=*L;
while(t2-> next!=NULL)
{
t2=t2-> next;
}
t2-> next=t1;
/*
if(n==1)
{
t1-> next=t2;
*L=t1;
}
else
{
while(j
{
t2=t2-> next;
j++;
}
if(j==n-1)
{
t1-> next=t2-> next;
t2-> next=t1;
}
else
{
cout < < "Insert error! ";
}
}*/
}
/*显示链表*/
void display(struct Lnode **L)
{
struct Lnode *t;
t=*L;
if(t==null)
{
cout << "The link is null! ";
}
else
{
for(;t!=null;)
{
cout <
t=t-> next;
}
}
cout << "\n ";
}
/* 初始化和排序*/
void init(struct Lnode**L,int n,char str[]) {
int i,j,k,x=0,p=0;
char ti,d[100];//,r[100]。
//struct Lnode*t;
for(i=0;i <=n-1;i++)
{
d[i]=str[i];
}
for(j=0;j for(k=j+1;k <=n-1;k++) { if(int(d[j])> int(d[k])) { ti=d[j]; d[j]=d[k]; d[k]=ti; //cout < } } /*for(j=0;j 因为前面已排过序,就不需要两个for循环了,直接比较一下 这个字符和刚才插入链表的是否一样,一样就不再插入就行了。 for(k=j+1;k <=n-1;k++) { if(d[j]==d[k]) { x++; d[j]=d[k]; cout < < "123 "; cout < for(int m=k;m { d[m]=d[m+1]; } n--; } } */ creat(&*L); //for(int h=1;h <(n;h++) //{ // insert(&*L,h,d[h]); //} if(n> 0) insert(&*L,d[0]);//第一个字符是要插入的 for(int h=1;h { if(d[h] != d[h-1]) insert(&*L,d[h]); } // cout < < "The data of the linktable is: "; // display(&*L); } /*删除指定位置的节点*/ void delet(struct Lnode **L,int n) { int i=1; struct Lnode *t1,*t2; t1=*L; if(n==1)