C语言:键盘输入1创建顺序表,输入2插入数据,输入3查询数据,输入4删除数据.要求顺序表中的数据为结构体类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言:键盘输入1创建顺序表,输入2插入数据,输入3查询数据,输入4删除数据.要求顺序表中的数据为结构体类型相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
#define listsize 100
typedef struct /*建立结构体类型*/
long int num;
char name[20];
char gender;
int age;
student;
typedef struct
student *stu;
int length;
sqlist;
void create(sqlist *l) /*创建*/
int i;
printf("请输入元素个数:\n");
scanf("%d",&l->length);
printf("请输入%d个元素:\n",l->length);
for(i=0;i<l->length;i++)
scanf("%ld%s%c%d",&l->(stu+i)->num,l->(stu+i)->name,&l->(stu+i)->gender,&l->(stu+i)->age);
void search(sqlist *l) /*查询*/
student e;
int i;
printf("请输入需要查询的记录:\n");
scanf("%ld%s%c%d",&l->(e->num),l->(e->name),&l->(e->gender),&l->(e->age));
for(i=0;i<l->length;i++)
if(l->(stu+i)==e)
printf("这条记录在该表的第%d行。\n",i);
break;
;
if(i>=l->length) printf("此条记录不存在于该表中。\n");
void insert(sqlist *l) /*插入*/
student x;
int i,j;
printf("请输入需要插入的记录:\n");
scanf("%ld%s%c%d",&l->(x->num),l->(x->name),&l->(x->gender),&l->(x->age));
printf("请输入需要插入的位置:\n");
scanf("%d",&i);
if(l->length==listsize) printf("该表已满!\n");
for(j=l->length-1;j>=i;j--)
l->(stu+j+1)=l->(stu+j);
l->(stu+i)=x;
l->length++;
void delet(sqlist *l) /*删除*/
int i,j;
printf("请输入需要删除记录的位置:\n");
scanf("%d",&i);
if(l->length==0) printf("该表为空表!\n");
for(j=i;j<l->length-1;j++)
l->(stu+j)=l->(stu+j+1);
l->length--;
void main()
sqlist *l;
int n;
l->stu= (student *)malloc(sizeof(student));
l->length=0;
printf("-提示-\n-创建顺序表:1\n-插入记录:2\n-查询记录:3\n-删除记录:4\n请输入您要执行的操作!\n");
n=getchar();
switch(n)
case '1':create(l);break;
case '2':
if(l->length==0) printf("请先创建顺序表!\n");
else insert(l);
break;
case '3':
if(l->length==0) printf("请先创建顺序表!\n");
else search(l);
break;
case '4':
if(l->length==0) printf("请先创建顺序表!\n");
else delet(l);
break;
default: printf("无效输入!\n");
求改错。
student stu[listsize];
int length;
sqlist;
int isEqual(const student *st0,const student *st1) /* 比较函数 */
if(st0->num!=st1->num)return 0;
if(0!=strcmp(st0->name,st1->name))return 0;
if(st0-> gender!=st1->gender)return 0;
if(st0->age!=st1->age)return 0;
return 1;
int main()
sqlist lst;
sqlist *l=&lst;
int n;
/* l->stu=(student *)malloc(sizeof(student)); */
/* 由于有最大数据容量,直接定义数组,更好,这个分配内存就不需要了。 */
...
return 0;
void search(sqlist *l) /*查询*/
student e;
int i;
printf("请输入需要查询的记录:\n");
scanf("%ld%s%c%d",&l->(e->num),l->(e->name),&l->(e->gender),&l->(e->age));
for(i=0;i<l->length;i++)
/* if(l->(stu+i)==e) */
/*不能这么比较,做个比较函数,用来比较,然后像下面那样比较*/
if(isEqual(l->(stu+i),&e))
printf("这条记录在该表的第%d行。\n",i);
break;
;
if(i>=l->length) printf("此条记录不存在于该表中。\n");
本回答被提问者和网友采纳 参考技术B 自己上机调试比较好。
一个c语言的程序题?
1.编写程序,实现从键盘中输入五个整数,并将五个数输出(注明:必须用尾插
入法建立单链表来存储该五个数)。
2.编写程序,在第 1 题的基础上再分别在链表中插入一个元素以及删除一个元素,
再输出链表中的所有元素
首先,定义一个单链表的结构体,用来存储整数值和指向下一个结构体的指针
然后,在main()函数中定义一个头节点指针,并用它来存储整个链表
接下来,实现从键盘输入五个整数并将它们尾插入链表中
最后,实现链表中的插入和删除操作,并输出链表中的所有元素
下面是一个可行的c语言程序,该程序实现了从键盘输入五个整数并存储在链表中,然后插入和删除一个元素,最后输出链表中的元素。
参考技术A 下面是一个示例代码,它实现了从键盘中输入五个整数,并使用尾插法建立单链表来存储这五个数,然后输出链表中的所有元素的功能:Option Explicit
Dim head As Node
Private Type Node
data As Integer
nextNode As Node
End Type
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 5
InputNumber
Next
PrintList
End Sub
Private Sub InputNumber()
Dim newNode As Node
Set newNode = New Node
newNode.data = InputBox("请输入整数:")
If head Is Nothing Then
Set head = newNode
Else
Dim p As Node
Set p = head
Do While p.nextNode Is Not Nothing
Set p = p.nextNode
Loop
Set p.nextNode = newNode
End If
End Sub
Private Sub PrintList()
Dim p As Node
Set p = head
Do While p Is Not Nothing
Debug.Print p.data
Set p = p.nextNode
Loop
End Sub
在上述代码的基础上,您可以添加两个新函数来实现在链表中插入一个元素以及删除一个元素的功能:
Private Sub InsertNumber(data As Integer, pos As Integer)
Dim newNode As Node
Set newNode = New Node
newNode.data = data
If pos = 1 Then
newNode.nextNode = head
Set head = newNode
Else
Dim p As Node
Set p = head
Dim i As Integer
For i = 1 To pos - 2
Set p = p.nextNode
Next
newNode.nextNode = p.nextNode
Set p.nextNode = newNode
End If
End Sub
Private Sub DeleteNumber(pos As Integer)
If pos = 1 Then
Set head = head.nextNode
Else
Dim p As Node
Set p = head
Dim i As Integer
For i = 1 To pos - 2
Set p = p.nextNode
Next
Set p.nextNode = p.nextNode.nextNode
End If
End Sub
您可以在调用这些函数时使用以下代码来插入和删除元素:
InsertNumber 100, 3
DeleteNumber 2 参考技术B
这是第一问的代码:
#include <stdio.h>
#include <stdlib.h>
struct node
int data;
struct node* next;
;
int main()
int i;
struct node *head, *p, *q;
head = NULL; // 初始化头指针
for (i = 0; i < 5; i++)
// 分配内存
q = (struct node*)malloc(sizeof(struct node));
scanf("%d", &q->data); // 从键盘输入数据
q->next = NULL; // 设置链表尾
if (head == NULL)
head = q; // 如果是第一个节点,则将头指针指向该节点
else
p->next = q; // 尾插入法,将新节点插入到链表尾
p = q; // 将新节点作为下一个节点的前驱
p = head; // 设置遍历指针
while (p != NULL)
printf("%d ", p->data); // 输出节点的数据
p = p->next; // 指向下一个节点
return 0;
这是第二问的代码:
#include<stdio.h>
#include<stdlib.h>
struct node
int data;
struct node *next;
;
int main()
struct node *head, *p, *q;
int i;
head = NULL;
for(i=0; i<5; i++)
p = (struct node *)malloc(sizeof(struct node));
printf("输入第%d个数:", i+1);
scanf("%d", &p->data);
p->next = NULL;
if(head == NULL)
head = p;
else
q->next = p;
q = p;
p = head;
printf("链表中的元素是:\\n");
while(p != NULL)
printf("%d ", p->data);
p = p->next;
printf("\\n");
// 在链表中插入一个元素
p = (struct node *)malloc(sizeof(struct node));
p->data = 99;
p->next = head;
head = p;
// 删除一个元素
p = head;
head = head->next;
free(p);
p = head;
printf("
//定义链表结构
struct Node
int data;
Node *next;
;
//定义头结点
Node *head;
//定义尾插入函数
void insertTail(int data)
Node *node = new Node;
node->data = data;
node->next = NULL;
if (head == NULL)
head = node;
else
Node *p = head;
while (p->next != NULL)
p = p->next;
p->next = node;
//定义输出函数
void printList()
Node *p = head;
while (p != NULL)
cout << p->data << " ";
p = p->next;
cout << endl;
int main()
int data;
//从键盘输入五个整数
for (int i = 0; i < 5; i++)
cin >> data;
//尾插入法建立单链表
insertTail(data);
//输出链表中的所有元素
printList();
return 0;
2.编写程序,在第 1 题的基础上再分别在链表中插入一个元素以及删除一个元素,再输出链表中的所有元素
//定义插入函数
void insertNode(int data, int pos)
Node *node = new Node;
node->data = data;
node->next = NULL;
if (head == NULL)
head = node;
else
Node *p = head;
int i = 0;
while (p->next != NULL && i < pos - 1)
p = p->next;
i++;
node->next = p->next;
p->next = node;
//定义删除函数
void deleteNode(int pos)
if (head == NULL)
return;
else
Node *p = head;
int i = 0;
while (p->next != NULL && i < pos - 1)
p = p->next;
i++;
Node *q = p->next;
p->next = q->next;
delete q;
int main()
int data;
//从键盘输入五个整数
for (int i = 0; i < 5; i++)
cin >> data;
//尾插入法建立单链表
insertTail(data);
//在链表中插入一个元素
insertNode(100, 3);
//在链表中删除一个元素
deleteNode(3);
//输出链表中的所有元素
printList();
return 0;
参考技术D # 定义链表节点类
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
# 尾插入法建立链表
def createLinkedList(nums):
head = ListNode() # 定义头节点
cur = head
for num in nums:
cur.next = ListNode(num)
cur = cur.next
return head.next
# 在链表末尾插入一个元素
def insertLinkedList(head, val):
cur = head
while cur.next:
cur = cur.next
cur.next = ListNode(val)
# 从链表中删除一个元素
def deleteLinkedList(head, val):
dummy = ListNode(0)
dummy.next = head
pre, cur = dummy, head
while cur:
if cur.val == val:
pre.next = cur.next
break
pre = cur
cur = cur.next
return dummy.next
# 输出链表中的所有元素
def printLinkedList(head):
cur = head
while cur:
print(cur.val, end=" ")
cur = cur.next
print()
# 主函数
if __name__ == '__main__':
# 输入五个整数并建立链表
nums = []
for i in range(5):
num = int(input("请输入第%d个整数:" % (i+1)))
nums.append(num)
head = createLinkedList(nums)
# 在链表中插入一个元素并输出链表中的所有元素
val = int(input("请输入要插入的整数:"))
insertLinkedList(head, val)
print("插入后链表中的所有元素:")
printLinkedList(head)
# 从链表中删除一个元素并输出链表中的所有元素
val = int(input("请输入要删除的整数:"))
head = deleteLinkedList(head, val)
print("删除后链表中的所有元素:")
printLinkedList(head)
这段代码实现了从键盘中输入五个整数,并用尾插入法建立单链表来存储这五个数。然后,用户可以输入一个整数,程序会在链表末尾插入这个整数,并输出链表中的所有元素。接着,用户可以输入要删除的整数,程序会从链表中删除这个整数,并再次输出链表中的所有元素。
有帮到你的话望采纳 谢谢~
以上是关于C语言:键盘输入1创建顺序表,输入2插入数据,输入3查询数据,输入4删除数据.要求顺序表中的数据为结构体类型的主要内容,如果未能解决你的问题,请参考以下文章
用C语言建立一个顺序存储的线性表并实现线性表的插入和删除操作