C语言顺序表问题

来源:百度知道 编辑:UC知道 时间:2024/04/29 07:57:39
以下是程序代码
#include <iostream.h>
#define MAXSIZE 50

typedef char DataType;
int last;
typedef struct
{
DataType data[MAXSIZE]; /*存放顺序表的元素*/
int last; /*存放顺序表尾指针*/
}SeqList; /*顺序表类型定义*/

SeqList *Init_SeqList() /*初始化顺序表并得到其指针L*/
{
SeqList *L;
L=new SeqList; /*分配存放顺序表的空间*/
L->last=-1;
return L;
}

int Insert_SeqList(int i,DataType e) /*在顺序表L中第i个位置上插入元素e,成功返回1,否则返回0*/
{
SeqList *L;
if(i<1||i>=L->last+1) return 0; /*判断位序i是否在线性表长度范围内,若超出长度则返回0*/
for(int j=L->last;j>i+1;j--) /*将data[i]及后面的元素后移一个位置*/
L->data[j+1]=L->data[j];
L->data[i-1]=e; /*将插入的数值e附值给要第i个位序的数组元素*/
L->last++; /*顺序表长度

L->last=-1;
顺序表长度初始化为-1,if(i<1||i>=L->last+1) return 0;if语句将会始终判断为真,不会执行下面的语句,因而就不会插入
还有按你的插入法,是将原位置的数后移,那么如果要插入到顺序表末尾的话,i应为L->last+1吧,这样的话,你的判断语句就应为i>L->last+1

for(int j=L->last;j>=i;j--) /*将data[i]及后面的元素后移一个位置*/
L->data[j+1]=L->data[j];
L->data[i]=e; /*将插入的数值e附值给要第i个位序的数组元素*/
L->last++; /*顺序表长度增1*/
return 1;
}

struct student *insert(struct student *head) //插入信息
{
struct student *p1,*p2,*stu;
stu=(struct student *)malloc(sizeof(struct student));
scanf("%d%s%s%s%f",&stu->num,stu->name,stu->place,stu->college,&stu->score);
p1=head;
while((stu->num>p1->num) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
while(p1->num==stu->num)
{
printf("学号重复,重新输入!!!!!\n");
scanf("%d%s%s%s%f",&stu->nu