Ⅰ 编程实现线性表的链式存储结构,即链表,实现链表的建立和输出
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct node
{
int num;
char name[10],Class[15];
struct node *next;
}*head,*p,*q;
int main()
{
int i,num;
char name[10],Class[15];
head=(struct node*)malloc(sizeof(struct node));
memset(name,'\0',sizeof(name));
memset(Class,'\0',sizeof(Class));
printf("信息输入:\n");
scanf("%d%s%s",&num,name,Class);
head->num=num;
strcpy(head->name,name);
strcpy(head->Class,Class);
head->next=NULL;
for(i=0;i<5;i++)
{
memset(name,'\0',sizeof(name));
memset(Class,'\0',sizeof(Class));
scanf("%d%s%s",&num,name,Class);
p=(struct node*)malloc(sizeof(struct node));
p->num=num;
strcpy(p->name,name);
strcpy(p->Class,Class);
p->next=head;
head=p; //不带头结点的头插法
}
printf("信息输出:\n");
p=head;
while(p)
{
if(p->num<10) printf("0");
printf("%d %s %s\n",p->num,p->name,p->Class);
p=p->next;
}
p=head;
while(p) //释放空间
{
q=p;
p=p->next;
free(q);
}
return 0;
}
输入:
01 张三 初二(1)班
02 李四 初二(1)班
03 王五 初二(1)班
04 钱六 初二(1)班
05 孙七 初二(1)班
06 赵八 初二(1)班
输出:
06 赵八 初二(1)班
05 孙七 初二(1)班
04 钱六 初二(1)班
03 王五 初二(1)班
02 李四 初二(1)班
01 张三 初二(1)班
Ⅱ 线性表的链式存储结构定义及基本操作
是这个效果吗
Ⅲ 如何用C语言实现简单的链式存储结构
使用结构体:
typedefstructnode{
intdata;
structnode*next;
}Node;
就可以实现,以上是一个单链表的节点元素,每个节点的next指向下一个节点,就可以实现链式存储了。遇到其他类似的问题,可以根据需要设置相应的指针域。
Ⅳ 建立一个链式存储的线性表,并实现线性表的插入和删除操作。
Status ListInsert_Sq(SqList &L, int i, ElemType e) {
//在顺序表L中第i个位置之前插入新元素e
// i的合法值为1≦i≦ListLength_Sq(L)+1
if (i<1||i>L.length+1) return ERROR; //i值不合法
if (L.length>=L.listsize) { //当前空间已满
newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType)) ;
if (!newbase) exit (OVERFLOW);
L.elem = newbase;
L.listsize=L.listsize+INCREMENT;
}
q=&(L.elem[i-1]);//q为插入位置
for (p=&(L.elem[L.length-1]), p>=q; --p)
*(p+1)=*p; //插入位置及之后的元素右移
*q=e; //插入元素
L.length++; //表长增1
return OK;
}//ListInsert_Sq
Ⅳ 建立一个链式存储结构的线性表
#include<stdio.h>
#include<stdlib.h>
//**************以下为链表的节点定义**********************
typedef struct node *list_pointer;
typedef struct node{
int data;
struct node *link;
}list_node;
list_pointer init( );
void create( );
void display( );
void add( );
void delete( );
int main( ) {
list_pointer ptr = NULL;
ptr = init( );
create(ptr);
display(ptr);
add(ptr);
display(ptr);
delete(ptr);
display(ptr);
}
//***********************以下为链表的初始化*********************
list_pointer init( )
{
list_pointer s;
s = (list_pointer) malloc (sizeof (list_node) );
printf("初始化链表\n");
if (s)
{
s->link = NULL;
return s;
}else
{ printf("空间不足");
return NULL;
}
}
//***********************以下为建表************************
void create(list_pointer ptr)
{
int i,n;
char tmp ;
list_pointer p;
printf ("请输入表的元素个数\n");
scanf ("%d", &n);
for (i = 0; i < n; i++)
{
printf("请输入第%d个元素\n",i+1);
fflush(stdin);
scanf("%d",&tmp);
p = (list_node *)malloc (sizeof (list_node) );
p->data = tmp;
p->link = (ptr)->link;
(ptr)->link = p;
}
}
//***********************展示元素***********************
void display (list_pointer ptr)
{
list_pointer pp;
pp = ptr->link;
printf("顺序表的结点分别是:\n");
while(pp) {
printf("%d\t",pp->data);
pp = pp->link;
}
}
//********************插入元素************************
void add(list_pointer ptr)
{
int n;
list_pointer p;
printf("请输入需要插入的结点:\n");
scanf("%d",&n);
p = (list_pointer) malloc (sizeof (list_node) );
p->data = n;
p->link = ptr->link;
ptr->link = p;
}
//*********************以下为删除元素*******************
void delete(list_pointer ptr)
{
int i = 0,n;
list_pointer first,second;
do
{
printf("请输入要删除元素的位置:\n");
scanf("%d",&n);
}while(n < 0);
second = ptr;
while (i<n && second)
{
i++;
second = second->link;
first = second ->link;
printf("this is OK\n");
}
if (i < n)
{
printf("表中不存在此元素\n");
}else
{
printf("this is Ok\n");
second->link = first->link;
printf("this is OK\n");
free(first);
}
}
我写的跟你要求的基本一致,名字改一下就可以了。