#include<iostream>
#include<queue>
using namespace std
typedef struct node{
int data
struct node *next
}Node,*List
List createList(int N,int multi)
{
List head = (List)malloc(sizeof(Node))
head->data = 0
head->next=NULL
int count = 0
List p = head
while(count<N)
{ count++
List s = (List)malloc(sizeof(Node))
s->data = count*multi
s->next = NULL
p->next = s
p = s
}
return head
}
void traverse(List head)
{
if(head == NULL)
{
return
}
List p = head->next
while(p)
{
cout<<p->data<<" "
p = p->next
}
cout<<endl
}
List unionList(List list1,List list2)
{
if(list1 == NULL||list1->next==NULL)
return list2
if(list2 == NULL||list1->next==NULL)
return list1
list1 = list1->next
list2 = list2->next
List head = (List)malloc(sizeof(Node))
List p = NULL
if(list1!=NULL && list2!=NULL)//初始化第一个节点
{
if(list1->data<=list2->data)
{
head->next = list1
list1 = list1->next
}else{
head->next = list2
list2 = list2->next
}
}
p = head->next
while(list1!=NULL && list2!=NULL)//主体部分
{
if(list1->data<=list2->data)
{
p->next = list1
list1 = list1->next
p = p->next
宏手 }else{
p->next = list2
list2 = list2->next
p = p->next
蔽销嫌 }
}
while(list1 != NULL)//如果list2已经完了,list1还有剩余
{
p->next = list1
list1 = list1->next
p = p->斗枝next
}
while(list2 != NULL)//如果list1已经完了,list2还有剩余
{
p->next = list2
list2 = list2->next
p = p->next
}
return head
}
int main()
{
int N = 10
List head1 = createList(N,1)
List head2 = createList(N,2)
traverse(head1)
traverse(head2)
List head = unionList(head1,head2)
traverse(head)
getchar()
return 0
}
#include<stdio.h>#include<stdlib.h>
void displayData(int a[100])
{
int i
for(i=0i<100i++)
{
if(i%5==0){
printf("\n")
}
printf("%4d",a[i])
}
}
//判断数组中元素是否重复,重复返回1,否则返回0
int chongfu(int r[],int n,int data)
{
int i
for(i=0i<ni++)
{
if(r[i]==data)
{
return 1
}
}
return 0
}
//生成随机数的数组
void createRandomArray(int RAN[100])
{
int i,flag=0,random
for(i=0i<100i++)
{
while(1)
{
random=rand()
if(random<1000&&chongfu(RAN,i-1,random)==0)
{
RAN[i]=random
break
}
}
}
displayData(RAN)
}
//插入排序
void insertsort(int r[],int i,int x)
{ /铅桥/i为数组r中已有序的元素的个数
while(i!=0 ){ r[i]=r[i-1]i--}
r[i]=x}
void main()
{
int RAN[100]
createRandomArray(RAN)
printf("\nok,随机数生成,开始执行排序 *** 作 :\n")
printf("槐散猛\n执掘掘行插入排序后:\n")
bubbleSort(RAN)
printf("\n执行选择后:\n")
chageSort(RAN)
printf("\n")
displayData(RAN)
getchar()
}
我帮你看了一下,找出了你错误的地方。以下是修改后的源代码,修改地方核樱都有注释(vc++ 6.0下编译通过):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char datatype
typedef struct node
{
datatype data
struct node *next
} linklist
linklist*createlist()
{
//int num
datatype num/* 类型要保持一致 */
linklist *head,*s,*r
head=(linklist*)malloc(sizeof(linklist))
r=head
printf("请输入非递减链表,以#结束\n")
fflush(stdin)//清空输入缓冲区,避免回车字符被接收
num=getchar()
while(num!='#')
{
s=(linklist*)malloc(sizeof(linklist)) //令s为申请的空间掘悉
s->data=num
r->next=s
r=s
fflush(stdin)//清空输入缓冲区,避免回车字符被接收
num=getchar()
}
r->next=NULL
return head
}
//在带头节点的单链表head中查找第i个节点,若找到,则返回该节点的存储位置;否则返回判氏乎NULL
void putout(linklist *head) //单链表的输出
{
linklist *p
p=head->next
if(p==NULL) printf("链表为空")
else
{
while (p!=NULL)
{
printf("%c",p->data)//先这样写,最后要修改输出之间的间距
p=p->next
}
}
}
//void insert(linklist*head,int num) //插入函数,x为要插入的结点上的数据
void insert(linklist*head,datatype num/* 类型要保持一致 */) //插入函数,x为要插入的结点上的数据
{
linklist *s,*p,*q
s=(linklist*)malloc(sizeof(linklist)) //令s为申请的空间
s->data=num//s的数据是num
p=head->next
q=p->next //一开始p为第一个结点,q为第二个结点 (样本写反了还是?)
while(q!=NULL)
{
if(num<=q->data&&num>=p->data) //题设要求事先输入的是非递减,
{
p->next=s
s->next=q
break
} //找到并插入
else
{
p=q
q=q->next
} //没找到,继续往后移动
}
if(q == NULL)//没找到才执行这里, 不然p->data的值是上面while语句break出来后存的值,再进入这里执行就不对
{
//if(num>=q->data) //比最大的还大,则插入到最后面s->data能否换成num?
if(num>=p->data) //这里要写p->data,因为while语句找不到q已经指向NULL了
{
//q->next=s
p->next=s//这里要写p->data,因为while语句找不到q已经指向NULL了
s->next=NULL
}
if(num<=head->next->data)//比最小的还小,则插入到最前面
{
p=head->next //这一行没看懂有什么意义……待会儿去掉试试
head->next=s
s->next=p
}
}
}
void main()
{
linklist *head
//int num
datatype num/* 类型要保持一致 */
head=createlist()
putout(head)
printf("\n")
printf("请输入一个要插入的元素:")
//scanf("%d",&num)
fflush(stdin)//清空输入缓冲区,避免回车字符被接收
num=getchar()//类型要一致,继续字符形式输入
insert(head,num)//插入
putout(head)//输出
printf("\n")//换行,输出好看一点
}
另外你说打印为啥要%c,因为链表的生成是以字符输入,你%d的话打印的结果是字符的ascii码值。
希望对你有帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)