1.设有n 个整数组成的序列存放于一个带头结点的单链表中,HEAD为头指针.每个整数为-1,0,1之一.编写一个时间复杂
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/08/14 05:04:38
1.设有n 个整数组成的序列存放于一个带头结点的单链表中,HEAD为头指针.每个整数为-1,0,1之一.编写一个时间复杂度为O(n)的算法,使该序列按负数、零、正数的次序排好.(数据结构问题,用C解决)
![1.设有n 个整数组成的序列存放于一个带头结点的单链表中,HEAD为头指针.每个整数为-1,0,1之一.编写一个时间复杂](/uploads/image/z/3132366-6-6.jpg?t=1.%E8%AE%BE%E6%9C%89n+%E4%B8%AA%E6%95%B4%E6%95%B0%E7%BB%84%E6%88%90%E7%9A%84%E5%BA%8F%E5%88%97%E5%AD%98%E6%94%BE%E4%BA%8E%E4%B8%80%E4%B8%AA%E5%B8%A6%E5%A4%B4%E7%BB%93%E7%82%B9%E7%9A%84%E5%8D%95%E9%93%BE%E8%A1%A8%E4%B8%AD%2CHEAD%E4%B8%BA%E5%A4%B4%E6%8C%87%E9%92%88.%E6%AF%8F%E4%B8%AA%E6%95%B4%E6%95%B0%E4%B8%BA%EF%BC%8D1%2C0%2C1%E4%B9%8B%E4%B8%80.%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82)
//此题适用计数排序
#include
#include
typedef struct node
{
int num;
struct node * next;
}Node,*List;
List ListInit(List Head,int n)
{
List p;
int i;
for(i = 0; i < n; i ++)
{
p = (List)malloc(sizeof(Node));
p->next = Head;
Head = p;
}
return Head;
}
List ListReleas(List Head)
{
List p = Head;
while(Head)
{
p = Head;
Head=p->next;
free(p);
}
return Head;
}
int main()
{
List Head = NULL,p = NULL;
int count[3] = {0},n,inum;
printf("输入节点数:");
scanf("%d",&n);
Head = ListInit(Head,n);
printf("输入每个节点值(共%d个,只接受-1,0,1):\n",n);
p = Head;
while( p != NULL )
{
scanf("%d",&p->num);
if(p->num < 2 && p->num > -2)
p = p->next;
}
//以下为排序(计数排序)
p = Head;
while( p != NULL )
{
count[p->num + 1] ++;
p = p->next;
}
p = Head;
inum = -1;
while( p != NULL )
{
if(count[inum + 1])
{
p->num = inum;
p = p->next;
count[inum + 1]--;
}
else
inum ++;
}
//以下为输出
p = Head;
while( p != NULL )
{
printf("%d ",p->num);
p = p->next;
}
printf("\n");
ListReleas(Head);
return 0;
}
#include
#include
typedef struct node
{
int num;
struct node * next;
}Node,*List;
List ListInit(List Head,int n)
{
List p;
int i;
for(i = 0; i < n; i ++)
{
p = (List)malloc(sizeof(Node));
p->next = Head;
Head = p;
}
return Head;
}
List ListReleas(List Head)
{
List p = Head;
while(Head)
{
p = Head;
Head=p->next;
free(p);
}
return Head;
}
int main()
{
List Head = NULL,p = NULL;
int count[3] = {0},n,inum;
printf("输入节点数:");
scanf("%d",&n);
Head = ListInit(Head,n);
printf("输入每个节点值(共%d个,只接受-1,0,1):\n",n);
p = Head;
while( p != NULL )
{
scanf("%d",&p->num);
if(p->num < 2 && p->num > -2)
p = p->next;
}
//以下为排序(计数排序)
p = Head;
while( p != NULL )
{
count[p->num + 1] ++;
p = p->next;
}
p = Head;
inum = -1;
while( p != NULL )
{
if(count[inum + 1])
{
p->num = inum;
p = p->next;
count[inum + 1]--;
}
else
inum ++;
}
//以下为输出
p = Head;
while( p != NULL )
{
printf("%d ",p->num);
p = p->next;
}
printf("\n");
ListReleas(Head);
return 0;
}
1.设有n 个整数组成的序列存放于一个带头结点的单链表中,HEAD为头指针.每个整数为-1,0,1之一.编写一个时间复杂
在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head=
已知head为带头结点的单循环链表的头指针,链表中的数据元素依次为(a1,a2,a3,a4,…
head为头结点,head->next是表示头结点地址还是第一个结点的地址呢?
编写一个函数inv,将数组a中n个整数按相反顺序存放,用指针变量作为调用该函数时的实参
编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入整数为1到12 时...
已知带头结点的单链表L,指针P指向L链表中的一个结点为(非首结点、非尾结点),
为什么建立一个头结点的时候要使头结点的指针域为空
设指针p指向单链表中结点A,指针s指向被插入的结点X,则在结点A前面插入结点X是的操作序列为:
在一个头指针为L的循环链表中,指针域为next,指针P所指结点(此结点是尾结点)的条件是( ).
86.编写一个函数,计算两个整数值和.进而再编写一个函数,计算任意n(n>=1)个整数的和
编写一个函数,计算两个整数值和.进而再编写一个函数,计算任意n(n>=1)个整数的和