//设计应用举例
/*编程实现以下任务:建立一个线性表,依次输入数据0123456789、10、11、而后删除数据元素5,最后依次显示当前线性表中的数据元素,假设数据元素个数最大
不会超过100个*/
typedef struct{
DateType list[MAXSIZE];
int size;
}Seqlist;
//初始化
void ListInitiate(Seqlist *L)
{
L->size = 0;
}
//求数据元素个数
int ListLength(Seqlist L)
{
return L.size;
}
//插入数据元素,在顺序表L 的第 i 个位置 前 插入数据元素值x,
int ListInsert(L,i,x)
{
DateType i;
if(L->size >= MAXSIZE)
{
printf("ERROR !");
return 0;
}
else if(i<0 || i > L->size)
{
printf("ERROR !");
return 0;
}
else
{
//从后向前依次后移,为插入做准备
for(j = L->size ; j>i ; j--)
L->list[j] = L->list[j-1];
L->list[i] = x; //插入x
L->size++;
return 1;
}
//删除数据元素,删除顺序表L中位置i上的数据元素并保存到x中。
int ListDelete(Seqlist *L,int i,DateType *x)
{
//if else bala bala的,不写了。。。
*x = L->list[i]; //保存删除的元素到x中
for(j = i+1;j<= L->size-1;j++)
L->list[j-1] = L->list[j];
L->size--;
return 1;
}
//取出数据元素,取出顺序表L中第 i 个数据元素储存于 x 中
int ListGet(Seqlist L,int i,DateType *x)
{
*x = L.list[i];
return 1;
#include<stdio.h>
#define MAXSIZE 100
#typedef int DateType;
#include "Seqlist.h"
int main(void)
{
Seqlist mylist;
int i,x;stInitiate(&myst);
for(i = 0; i < 10; i++)
ListInsert(&mylist,i,i+1);
ListDelete(&mylist,4,&x);
for(i = 0;i< ListLength(mylist);i++)
{
ListGet(mylist,i,&x);
printf("%d",x);
}
}
带头节点的单链表一个实现
单链表的节点结构包括两个域:存储数据元素信息的数据域和存储直接后继位置的指针域.
定义:
typedef struct Node
{
DataType data;
struct Node *next
}SLNode;
//初始化//有空试试 *head
void ListInitiate(SLNode **head)
{
*head = (SLNode*)malloc(sizeof(SLNode));
(*head)->next = NULL;
}
/*在初始化操作前, 头指针参数 head 没有具体的地址,
在初始化操作时,指针参数head 才得到具体地址
而这个地址值要返回给调用函数。*/
//求当前数据元素个数
int ListLength(SLNode *head)
{
SLNode *p;
*p = head;
int size = 0;
while(p->next != NULL)
{
p = p->next;
size++;
}
return size;
}
/*函数传进的是指针的地址,
所以形式参数是 *head,定义指向链表的
指针 p 令 *p = head,*/
//插入x到链表的第 i 个节点前。
int ListInsert(SLNode *head,int i,DataType x)
{
SLNode *p,*q;//或者 SLNode *p = head;
p = head;
int j = -1;
while(p->next != NULL && j<i-1 )
{//最终让指针 p 指向第 n-1 个节点。
p = p->next;
j++;
}
if(j!=i-1)
{
printf("ERROR");
return 0;
}
q = (SLNode*)malloc(sizeof(SLNode));
q->data = x;
q->next = p->next;
p->next = q;
return 1;
}
“`
//删除第 i 个节点,被删的节点由 x 保存
int ListDelete(SLNode *head,int i,DataType *x)
{
SLNode *p,*s;
int j;
p = head;
j = -1;
while(p->next!=NULL&&p->next->next!= NULL&&j