c语言顺序线性表的实现代码: 运行时没有错误,可是不能出现想要的结果,求高手修改!!!

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct{ int *elem;
int length;
int listsize;
}SqList;
int *newbase;

InitList_Sq(SqList &L){
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) return 0;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 1;
}//InitList_Sq//

CreateList_Sq(SqList &L,int n){
L.length=n;
if(L.length>L.listsize){
newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) return 0;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
for(int i=0;i<n;i++)
L.elem[i]=rand()%100+1;
return 1;
}

InsertList_Sq(SqList&L,int i,int e){
int *p,*q;
if(i<1||i>L.length+1) return 0;
if(L.length==L.listsize){
newbase=(int *)realloc(L.elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(int));
if(!newbase) return 0;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
p=&(L.elem[i-1]);
for(q=&L.elem[L.length-1];q>=p;q--)
*(q+1)=*q;
*p=e;
++L.length;
return 1;
}

DeleteList_Sq(SqList &L,int i){
int *p;
if(i<1||i>L.length) return 0;
p=&(L.elem[i]);
for(p;p<(L.elem+L.length-1);p++)
*(p-1)=*p;
++L.length;
return 1;
}

OutputList_Sq(SqList L,int n)
{
if(L.length==0) printf("此表为空表!\n");
for(int i=0;i<n;i++)
printf("%d",L.elem[i]);
return 1;
}

int menu_select(){
int n;
printf("1:初始化一个线性表:\n");
printf("2:创建一个包含15个元素的线性表:\n");
printf("3:将一个数插入到第i个元素之前:\n");
printf("4:删除第i个元素:\n");
printf("5:输出线性表的每一个元素:\n");
do
{
printf("请输入选项代码n=1..6\n");
scanf("%d",&n);
}
while(n<0||n>6);
return n;

}

void main()
{
int n,i,e;
SqList L;
n= menu_select();
while(1){
switch(n){
case1: printf("初始化一个空表!\n"); InitList_Sq(L);OutputList_Sq(L,L.length);break;
case2: CreateList_Sq(L,15); OutputList_Sq(L,n);break;
case3: scanf("%d",i); e=rand(); InsertList_Sq(L,i,e);
OutputList_Sq(L,n);break;
case4: scanf("%d",i); DeleteList_Sq(L,i); OutputList_Sq(L,n);break;
case5: OutputList_Sq(L,n);break;
}
}
}
这是题目要求:1)编写完成下列功能的函数:(1)初始化一个线性表;(2)创建一个包含15个不大于100的正整数值的线性表(15个值由计算机随机产生);(3)将一个数插在第i个元素前(i在程序运行时输入);(4)删除第i个元素(i在程序运行时输入);(5)输出线性表中所有元素。
2)用主函数调用你所编写的函数,并在使线性表有所变化的每一步输出线性表的内容,以验证你编程序的正确性。

第1个回答  2011-09-18
你最好把你输入了什么,为什么判断程序出错给出来。这样别人好重现你的故障以便调试。啥都不说,就摆个代码出来,有什么用呀?
第2个回答  2011-09-19
修改如下:

//---------------------------------------------------------------------------

#include "stdio.h"
#include "stdlib.h"
typedef char DataType;
typedef struct node{
DataType data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
LinkList GreatListRH(void)
{
DataType ch;
LinkList head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("输入链表各结点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
ListNode *LocateNode (LinkList head,DataType key)
{
ListNode *p=head->next;
while(p&&p->data!=key)
p=p->next;
return p;
}
void InsertList(LinkList head,DataType x,int i)
{
ListNode *p=head,*s;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}

if(p==NULL)

s=(ListNode *)malloc(sizeof(ListNode));
s->data=x,
s->next=p->next;
p->next=s;
}
void DeleteList(LinkList head,int i)
{
ListNode *p=head,*r;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}

if(p==NULL||p->next==NULL)

r=p->next;
p->next=r->next;
free(r);
}
void main()
{
ListNode *p,*s;
DataType key;
ListNode *q;
int i;
DataType x;

p=GreatListRH();
printf("输入链表各结点的数据:\n");
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");

printf("输入要查找的数据:");
scanf("%c",&key);
q=LocateNode(p,key);
if(q!=NULL)
printf("找到值为%c的结点:\n",key);
else
printf("没有找到值为%c的结点:\n",key);
printf("\n");

printf("输入要插入的数据和位置:");
fflush(stdin);
scanf("%c%d",&x,&i);
InsertList(p,x,i);
printf("在第%d个位置插入%c后链表各结点的数据:\n",i,x);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的插入
printf("输入要删除结点的位置:");
scanf("%d",&i);
DeleteList(p,i);
printf("在第%d个位置删除结点后链表各结点的数据:\n",i);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的删除
}
//---------------------------------------------------------------------------
第3个回答  2011-09-19
c语言顺序线性表的实现代码: 运行时没有错误,可是不能出现想要的结果,求高手修改!!!

去猪八戒找人帮你解决

希望楼主早日解决问题

c语言顺序表程序编写,高手快帮我啊!
这是我写的代码希望对你有帮助:\/* Note:Your choice is C IDE *\/ include "stdio.h"define maxsize 100 typedef struct { int data[maxsize];int length;}sequetiallist;main(){ int x,y,i=0,k;sequetiallist ll;printf("please create the list!\\n");scanf("%d",&y);while(y!=1...

线性表的基本操作c语言实现
SeqList* list = SeqList_Create(5);\/\/创建线性表 int i = 6;\/\/赋值6个变量,已超过线性表最大值 5 int j = 1;int k = 2;int x = 3;int y = 4;int z = 5;int index = 0;SeqList_Insert(list, &i, 7);\/\/将这6个变量插入线性表中 SeqList_Insert(list, &j, 0);Seq...

C语言实现线性表的逆置问题,顺序和单链表。在线等高手
逆置有两种方法,第一是把所有节点反过来。还有一种就是改变节点中的值。第一种情况,其实可以考虑用头插法,来实现逆置。下面的算法是基于头插法的思想,逆置链表的,仅供参考。LinkList anti_linklist(LinkList demo){ LInkList *p,*q;\/\/work pointer LinkList head;head=new LinkList();head->...

c语言数据结构线性表插入和删除实现代码错误在哪
L->length = 0;return TRUE;}int insertlist(Sqlist *L,int pos,ElemType e) {int i;if(L->length == 0) { \/\/ 第一元素无条件插入L->elme[0] = e;L->length = 1;return TRUE;}if(L->length >= MAXSIZE) {printf("表满。length = %d。\\n",L->length);return ERROR;}if(...

用C语言实现线性表的顺序存储(创建,插入,删除和查找)
cout<<"输入有误!请重新输入!"<<endl; Sleep(DELAYTIME); break; } }}STUDENT * new_student()\/\/功能:创建学生信息(通过链表)\/\/返回值:头结点指针{ STUDENT *pnew,*p,*head; float *pfloat; char ch; head=NULL; do { system("cls"); pnew=(STUDENT *)malloc(sizeof(STUDENT)*1); cout<<"请...

怎么利用c语言实现顺序存储线性表的插入操作,有没有人会写程序_百度知...
比如你要在第i个元素之后插入,就把i+1直到最后一个元素依次向后移动一位,再把你要放的元素放到第i+1位置即可

用C语言编写程序实现顺序表的插入操作,并且从键盘读取元素给顺序表初...
\/\/int i;\/\/C++中C程序的变量定义放在开始 L.elem=(int *)malloc(LISTSIZE*sizeof(int));if(!L.elem) exit(0);L.listsize=LISTSIZE;\/\/printf("请输入线性表长度:");\/\/scanf("%d",&L.length);\/\/printf("为线性表赋值:");\/\/for(i=0;i<=L.length-1;i++)\/\/scanf("%5d",&...

用C语言头插法或尾插法建立带头结点的单链表,实现单链表上的插入,删除...
\/* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 *\/ Status ClearList(LinkList *L){ LinkList p,q;p=(*L)->next; \/* p指向第一个结点 *\/ while(p) \/* 没到表尾 *\/ { q=p->next;free(p);p=q;} (*L)->next=NULL; \/* 头结点指针域为空 *\/ return...

用C语言实现的,删除线性表中的值为奇数的元素的问题
如果是奇数的间隔大于等于1就不会出现这个问题,改改就可以了:int i,j;for (j=0;j<L->length;j++){ if(L->data[j]%2!=0){ for(i=j;i<L->length;i++){ L->data[i]=L->data[i+1];} L->length--; \/\/顺序表长度减1 \/\/这里加上一句:j --; \/\/为了继续删除掉移动到...

c语言 数据库 status在这是干什么用的 没有它不能初始化线性表嘛
typedef int Status;就是int 类型。代表标准函数返回。通常#define OK 1 #define ERROR 0 Status 就对应 return OK 或者 return ERROR

相似回答