数据结构(C语言) 设有一个线性表E,将线性表逆置,要求逆线性表占用原线性表空间,用顺序和单链表分别表
提供算法,请帮忙写一下完整的可以运行的源程序吧,谢谢!按我给的算法写,用VC++6.0运行成功即可。顺序表的定义与建表typedefintdatatype;#define...
提供算法,请帮忙写一下完整的可以运行的源程序吧,谢谢!
按我给的算法写,用VC++6.0运行成功即可。
顺序表的定义与建表
typedef int datatype;
#define maxsize 1024
typedef struct
{ datatype data[maxsize];
int last;
} sequenlist;
int InitList(void)
{
int num, i;
printf("please input no.:\n"); //输入元素的个数
scanf("%d", &num);
if(num>MAXSIZE)
{ printf("input error!\n");
return (-1);
}
L = (sequenlist *)malloc(sizeof(sequenlist)); //为L分配内存空间
if (L==NULL)
{ printf("malloc memory error!");
return (-1);
}
printf("please input L ( %d elements):\n", num); //输入数据元素内容
for (i=0; i<num; i++)
scanf("%d", &L->data[i]);
L->last = i-1;
return (0);
顺序表逆置
int InverseList(void)
{
int i,j;
datetype temp;
j = (L->last+1)/2;
for(i=0; i<=j; i++)
{
temp = L->data[i];
L->data[i] = L->data[L->last-i];
L->data[L->last-i] = temp;
}
return (1);
}
单链表逆置:
int InverseLink(void)
{ linklist *p ,*q ,*r;
if( head->next && head->next->next)
{ //当链表不是空表或单结点时
p=head->next; q=p->next;
p->next=NULL;
//将开始结点变成终端结点
r=p;
while (q)
{ //将后一结点变成开始结点
p=q; q=q->next ;
p->next = r; r = p;
}
head->next=r; retuen (1);
}
else return (0); 展开
按我给的算法写,用VC++6.0运行成功即可。
顺序表的定义与建表
typedef int datatype;
#define maxsize 1024
typedef struct
{ datatype data[maxsize];
int last;
} sequenlist;
int InitList(void)
{
int num, i;
printf("please input no.:\n"); //输入元素的个数
scanf("%d", &num);
if(num>MAXSIZE)
{ printf("input error!\n");
return (-1);
}
L = (sequenlist *)malloc(sizeof(sequenlist)); //为L分配内存空间
if (L==NULL)
{ printf("malloc memory error!");
return (-1);
}
printf("please input L ( %d elements):\n", num); //输入数据元素内容
for (i=0; i<num; i++)
scanf("%d", &L->data[i]);
L->last = i-1;
return (0);
顺序表逆置
int InverseList(void)
{
int i,j;
datetype temp;
j = (L->last+1)/2;
for(i=0; i<=j; i++)
{
temp = L->data[i];
L->data[i] = L->data[L->last-i];
L->data[L->last-i] = temp;
}
return (1);
}
单链表逆置:
int InverseLink(void)
{ linklist *p ,*q ,*r;
if( head->next && head->next->next)
{ //当链表不是空表或单结点时
p=head->next; q=p->next;
p->next=NULL;
//将开始结点变成终端结点
r=p;
while (q)
{ //将后一结点变成开始结点
p=q; q=q->next ;
p->next = r; r = p;
}
head->next=r; retuen (1);
}
else return (0); 展开
推荐于2017-11-24
展开全部
输入数据,输出数据,及线性表的长度,
询问是否查找数据,若查找则由用户输入需查找的数据,显示此数据在线性表中的位置(第几个)
*/
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct Node)
struct Node
{
int num;
struct Node* next;
};
struct Node *createline();
void showline(struct Node *head);
int getlen(struct Node *head);
int selectline(struct Node *head,int data);
int main()
{
struct Node *head;
int selflag;
int len = 0;
head = createline();
if(head == NULL)
{
printf("create error\n");
return 1;
}
showline(head);
printf("line's len is %d\n",getlen(head));
printf("0 select,other not select\n");
scanf("%d",&selflag);
if(selflag == 0)
{
printf("请输入要查找的数字:");
scanf("%d",&selflag);
len = selectline(head,selflag);
if(len < 0)
{
printf("无此数据\n");
}
else
{
printf("此数据在第%d个位置\n",len);
}
}
return 0;
}
struct Node *createline()
{
struct Node *head = NULL,*p1,*p2;
int len;
int i;
printf("请输入要插入数据的个数:");
scanf("%d",&len);
if(len <= 0 )
{
printf("len error\n");
return NULL;
}
for(i = 0; i < len; ++i)
{
p1 = (struct Node*)malloc(LEN);
printf("请输入第%d个数据:",i+1);
scanf("%d",&p1->num);
p1->next = NULL;
if(i == 0)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
}
return head;
}
void showline(struct Node *head)
{
struct Node *p1;
p1 = head;
while(p1)
{
printf("%d ",p1->num);
p1 = p1->next;
}
printf("\n");
return ;
}
int getlen(struct Node *head)
{
int len = 0;
struct Node *p1;
p1 = head;
while(p1)
{
len += 1;
p1 = p1->next;
}
return len;
}
int selectline(struct Node *head,int data)
{
int len = 1;
int flag = 0;
struct Node *p1;
p1 = head;
while(p1)
{
if(p1->num == data)
{
flag = 1;
break;
}
len += 1;
p1=p1->next;
}
if(flag == 0)
{
len = -1;
}
return len;
}
另外,站长团上有产品团购,便宜有保证
询问是否查找数据,若查找则由用户输入需查找的数据,显示此数据在线性表中的位置(第几个)
*/
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct Node)
struct Node
{
int num;
struct Node* next;
};
struct Node *createline();
void showline(struct Node *head);
int getlen(struct Node *head);
int selectline(struct Node *head,int data);
int main()
{
struct Node *head;
int selflag;
int len = 0;
head = createline();
if(head == NULL)
{
printf("create error\n");
return 1;
}
showline(head);
printf("line's len is %d\n",getlen(head));
printf("0 select,other not select\n");
scanf("%d",&selflag);
if(selflag == 0)
{
printf("请输入要查找的数字:");
scanf("%d",&selflag);
len = selectline(head,selflag);
if(len < 0)
{
printf("无此数据\n");
}
else
{
printf("此数据在第%d个位置\n",len);
}
}
return 0;
}
struct Node *createline()
{
struct Node *head = NULL,*p1,*p2;
int len;
int i;
printf("请输入要插入数据的个数:");
scanf("%d",&len);
if(len <= 0 )
{
printf("len error\n");
return NULL;
}
for(i = 0; i < len; ++i)
{
p1 = (struct Node*)malloc(LEN);
printf("请输入第%d个数据:",i+1);
scanf("%d",&p1->num);
p1->next = NULL;
if(i == 0)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
}
return head;
}
void showline(struct Node *head)
{
struct Node *p1;
p1 = head;
while(p1)
{
printf("%d ",p1->num);
p1 = p1->next;
}
printf("\n");
return ;
}
int getlen(struct Node *head)
{
int len = 0;
struct Node *p1;
p1 = head;
while(p1)
{
len += 1;
p1 = p1->next;
}
return len;
}
int selectline(struct Node *head,int data)
{
int len = 1;
int flag = 0;
struct Node *p1;
p1 = head;
while(p1)
{
if(p1->num == data)
{
flag = 1;
break;
}
len += 1;
p1=p1->next;
}
if(flag == 0)
{
len = -1;
}
return len;
}
另外,站长团上有产品团购,便宜有保证
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询