‘壹’ 利用线性表的顺序存储结构完成一个班级的所有课程的管理c语言要求实现增加,删除,修改学生成绩记录等功
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;	//链表数据
struct LNode* next;	//链表指针
}LNode,*LinkList;
/*头插法-建立单链表*/
LinkList HeadCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode));	//建立头结点
la->next=NULL;
scanf("%d",&num);
while(num!=10)
{
LNode *p=(LinkList)malloc(sizeof(LNode));
p->data=num;
p->next=la->next;
la->next=p;
scanf("%d",&num);
}
return la;
}
/*尾插法-建立单链表*/
LinkList TailCreate(LinkList la)
{
int num;
la=(LinkList)malloc(sizeof(LNode));
la->next=NULL;
LinkList s,r=la;
scanf("%d",&num);
while(num!=10)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=num;
r->next=s;
r=s;
scanf("%d",num);
}
r->next=NULL;
return la;
}
/*单链表遍历*/
void TravelList(LinkList la)
{
LinkList p=la->next;
while(p!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("\n");
}
/*单链表的按位查找*/
LinkList GetElem(LinkList la,int i)
{
int j=1;
LNode* p=la->next;
if(i<1)
return NULL;
while(p && j<i)
{
p=p->next;
j++;
}
return p;
}
/*单链表的按值查找*/
LinkList LocalElem(LinkList la,int e)
{
LNode* p=la->next;
while(p!=NULL && p->data!=e)
p=p->next;
return p;
}
/*单链表插入操作*/
bool InsertList(LinkList la,int i,int e)
{
//在la链表中的i位置插入数值e
int j=1;
LinkList p=la,s;
while(p && j<i)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
if((s=(LinkList)malloc(sizeof(LNode)))==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
/*单链表删除操作*/
bool DeleteList(LinkList la,int i)
{
int j=1;
LinkList p=la,q;
while(p && j<i)	//p指向第i-1个元素
{
p=p->next;
j++;
}
if(p==NULL || p->next==NULL)	//表示不存在第i-1个和第i的元素
return false;
q=p->next;
p->next=q->next;
free(q);
return true;
}
/*单链表的表长*/
int LengthList(LinkList la)
{
int nLen=0;
LinkList p=la->next;
while(p)
{
p=p->next;
nLen++;
}
return nLen;
}
/*单链表逆置*/
LinkList Reserve(LinkList la)
{
if(la==NULL || la->next==NULL)
return la;
LinkList p=la->next,q=p->next,r=q->next;
la->next=NULL;
p->next=NULL;
while(r!=NULL)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
q->next=p;
la->next=q;
return la;
}
int main()
{
LNode la;
LinkList p;
p=HeadCreate(&la);	//头插法创建单链表
TravelList(p);
printf("%p\n",GetElem(p,1));	//获得第1个结点地址
InsertList(p,2,10);	//在链表的第2个位置插入元素10
TravelList(p);
DeleteList(p,3);	//删除链表的第3个元素
TravelList(p);
printf("%d\n",LengthList(p));	//获得链表长度
p=Reserve(p);
TravelList(p);
return 0;
}
//运行结果
//5 6 12 7 8 14 9 3 2 5 14 10	头插法创建链表
//14->5->2->3->9->14->8->7->12->6->5->	显示链表
//00382490	第一个结点的地址
//14->10->5->2->3->9->14->8->7->12->6->5->	插入元素值为10的结点
//14->10->2->3->9->14->8->7->12->6->5->	删除第三个结点
//11	获得链表长度
//5->6->12->7->8->14->9->3->2->10->14->	链表逆置
//Press any key to continue
这是我写的一个线性表链式存储的综合程序,包含了你所要的创建、删除、插入、按值查找的功能,还有一些额外的功能。下面加注释的是程序运行结果,你可以参考试着改改程序,让程序更加完美。希望对你有帮助,呵呵!
‘贰’ 编写C语言一个通讯录程序
这是我以前写的课程设计,
电子通讯录功能如下:
Function choose
1.Read
2.Append
3.Delete
4.Search
5.Save and exit
6.Quit
说明:上图是电子通讯录的主菜单,利用它,将能够轻松地录入一个朋友的电话号
码,通讯地址和出生日期,而且它还提供了检索和删除功能。在后面还将提供按生
日先后排序的功能,这些都有助于该通讯录的管理。
电子通讯录是采用线性表作为程序的基本结构的。
设计思想:
1。用顺序表设计电子通讯录的结构
为了表示较为复杂的数据内容,一般用结构这种数据类型,第一步就是在结构中定
义所需要的各项信息。
一般的通讯录都包括姓名,性别,出生年月,通讯地址和联系电话这几项,而
在这几项中,出生年月又包括年份,月份和日期三项,通讯地址包括邮编和家庭地
址二项,我们把这些联系较为紧密的内容又用单独的结构表示,这样就产生了电子
通讯录的基本结构:
struct addr /*通讯地址结构定义*/
{ char post_num[10]; /*邮编*/
char addr[40]; /*家庭地址*/
};
struct birth /*出生年月结构定义*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct friend /*电子通讯录结构定义*/
{ int number; /*序号*/
char name[20] /*姓名*/
char sex; /*性别*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/
char telephone[13]; /*联系电话*/
}; 
定义的主结构friend包含了前述的五项内容 name,sex,和telephone分别代表
了姓名,性别和联系电话。为了让结构中的各项组分更加清晰,定义了二个
小结构birth 和addr分别代表出生年月和通讯地址,因此实际上friend包含了
8项内容。
有了结构定义后,我们可以很轻松地构造出电子通讯录的主体:
stryct friend friends[50];
采用一维数组 friends[50],正是用到了顺序表这种最简单的数据结构来表示
问题。
2.增添电子通讯录中的内容
对于电子通讯录这样一张顺序表来说,内容的录入是必不可少的操作。由
于采用的是顺序存储结构。这项工作很简单,只需要在把输入的信息按顺序放
在空的friends数组元素中即可。函数Data_Input完成了信息的录入工作:
void Data_input(int j)
{
friends[j].number=j;
printf("\n\n\n\tNo %d record",j);
printf("\n\n\tName:"); /*读入姓名*/
scanf("%s",friends[j].name);
printf("\n\tSex(m/f):"); /*读入姓别*/
scanf("%c",&friends[j].sex);
printf("\n\tbirthday:"); /*读入出生年月*/
printf("\n\t\tyear:");
scanf("%d",&friends[j].birth.year);
printf("\n\t\tmonth");
scanf("%d",&friends[j].birth.month);
printf("\n\t\tday");
scanf("%d",&friends[j].birth.day);
printf("\n\tPost number:"); /*读入邮编*/
scanf("%s",friends[j].addr.post_num);
printf("\n\tAddress:"); /*读入家庭地址*/
scanf("%s",friends[j].addr.addr);
printf("\n\ttelephone:"); /*读入联系电话*/
scanf("%s",friends[j].telephone);
}
‘叁’ 求数据结构试验 线性表的顺序存储结构
#include<iostream.h>
#include<stdlib.h>
#include <malloc.h>
#define  OVERFLOW   0
#define   OK       1 
#define   ERROR   0
#define LIST_INIT_SIZE  100//线性表存储空间的初始增量
#define LISTINCREMENT  10 // ?
typedef struct{
  int * elem;// 存储空间基址
 int   length;//当前长度
 int listsize;//当前分配的存储容量
}SqList;
SqList L;
int  InitList_Sq(SqList  & L){
 //构造一个新的线性表。
 L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
 if(!L.elem)exit(OVERFLOW);//存储容量失败
 L.length=0;               //空表长度为0
 L.listsize=LIST_INIT_SIZE;//存储初始容量
 return OK;
}//InitList_Sq
int LIstInsert_Sq(SqList & L,int i,int  e){
 //在顺序线性表L中第i位置之前插入新的元素e
  if(i<1||i>L.length+1) return  ERROR;
  if(L.length>=L.listsize){
int * newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
   if(!newbase)exit(OVERFLOW);
   L.elem=newbase;
   L.listsize+=LISTINCREMENT;
  }
 int *  q=&(L.elem[i-1]);
  for(int * p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
  *q=e;
  ++L.length;
  return OK;
}
int ListDelete_Sq(SqList&L,int i,int &e)
{
 if((i<1)||(i>L.length))return ERROR;
int *p=&(L.elem[i-1]);
 e=*p;
int *q=L.elem+L.length-1;
 for(++p;p<=q;++p)*(p-1)=*p;
 --L.length;
 return  OK;
}
void main()
{
 SqList  L;
 int i,n;
 int e;
 cout<<"输入顺序表的个数:"<<endl;
 cin>>n;
 int *p=(int *)malloc(n*sizeof(int));
 InitList_Sq(L);
 cout<<"输入线性表"<<n<<"个元素的值"<<endl;
 for(i=0;i<n;i++)
 {
  cin>>p[i];
  L.elem[i]=p[i];
 }
 cout<<endl;
 L.length=i;
 cout<<endl;
 cout<<"输入要插入元素的值"<<endl;
cin>>e;
cout<<endl;
cout<<"输入要插入的位置"<<endl;
cin>>i;
LIstInsert_Sq( L, i, e);
for(i=0;i<n+1;i++)
cout<<L.elem[i];
cout<<endl;
cout<<"输入要删除的位置"<<endl;
cin>>i;
ListDelete_Sq(L,i,e)
;for(i=0;i<n;i++)
cout<<L.elem[i];
free(p);
‘肆’ 用C语言编写程序实现线性表的顺序存储结构并实现以下功能: 1. 输入一组整数构造线性表;
比如你要在第i个元素之后插入,就把i+1直到最后一个元素依次向后移动一位,再把你要放的元素放到第i+1位置即可
‘伍’ 数据结构实验 线性表中顺序存储结构的基本操作算法(建顺序表,查询,插入,删除,遍历)
有序线性表插入一个数依然有序
#include<stdio.h>
#define MAXSIZE 6
typedef char datatype;
typedef struct SeqList
{
      datatypedata[MAXSIZE];
      int last;
}SeqList;
 
SeqList *init_SeqList()
{
      SeqList *L;
      L=(SeqList*)malloc(sizeof(SeqList));
      L->last=-1;
      return L;
}
int main()
{   SeqList *L;
    int k,x,j;
      intInser_SeqList(SeqList *L);
      L->last=0;
   L=init_SeqList();
      for(k=0;k<(MAXSIZE-1);k++)
      {   scanf("%d",&x);
           L->data[k]=x;
          L->last++;
      }
      Inser_SeqList(L);
   for(j=0;j<L->last;j++)
           printf("%d",L->data[j]);
 
  return 0;
}
int Inser_SeqList(SeqList *L)
{
      int j,x;
      if(L->last==MAXSIZE-1)
      {printf("表满");
         return (-1);
      }
  
       L->last++;
      for(j=L->last;j>=0;j--)
         if(L->data[j]<x)
              L->data[L->last]=x;
       else
            L->data[j+1]=L->data[j];
     
      return 1;
}
   你好,上面是我的程序:符合你的1  2  4点   查询、删除操作在课本里找到  写入即可  谢谢
